Microsoft Azure 服务总线中的 AMQP 1.0:基于请求/响应的操作

本主题定义 Azure 服务总线基于请求/响应的操作的列表。此信息基于 AMQP 管理版本 1.0 工作草案。

有关详细的线级 AMQP 1.0 协议指南(其中介绍了如何基于 OASIS AMQP 技术规范实现和建立服务总线),请参阅 Azure 服务总线和事件中心的 AMQP 1.0 协议指南

概念

实体描述

实体说明是指服务总线的 QueueDescription 类TopicDescription 类SubscriptionDescription 类对象。

中转消息

表示映射到 AMQP 消息的服务总线中的消息。 服务总线 AMQP 协议指南中定义了映射。

附加到实体管理节点

本文档中所述的全部操作都遵循请求/响应模式,这些操作的范围限制到实体,并需要附加到实体管理节点。

创建用于发送请求的管理节点链接。

    requestLink = session.attach(     
    role: SENDER,   
           target: { address: "<entity address>/$management" },   
           source: { address: ""<my request link unique address>" }   
    )  

创建用于从管理节点接收响应的链接。

    responseLink = session.attach(    
    role: RECEIVER,   
        source: { address: "<entity address>/$management" }   
           target: { address: "<my response link unique address>" }   
    )  

传输请求消息

传输请求消息。

    requestLink.sendTransfer(  
            Message(  
                    properties: {  
                            message-id: <request id>,  
                            reply-to: "<my response link unique address>"  
                    },  
                    application-properties: {  
                            "operation" -> "<operation>",  
                    },  
            )  

接收响应消息

从响应链接接收响应消息。

    responseMessage = responseLink.receiveTransfer()  

响应消息采用以下形式:

    Message(  
    properties: {     
            correlation-id: <request id>  
        },  
        application-properties: {  
                "statusCode" -> <status code>,  
                "statusDescription" -> <status description>,  
               },         
    )  

服务总线实体地址

必须如下所示处理服务总线实体:

实体类型 地址 示例
queue <queue_name> “myQueue”

“site1/myQueue”
主题 <topic_name> “myTopic”

“site2/page1/myQueue”
订阅 <topic_name>/Subscriptions/<subscription_name> “myTopic/Subscriptions/MySub”

消息操作

消息续订锁

按实体描述中指定的时间延长消息锁。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:renew-lock
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
lock-tokens uuid 的数组 要续订的消息锁令牌。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败。
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
expirations 时间戳的数组 对应于请求锁令牌的消息锁令牌新到期日。

速览消息

在不锁定的情况下速览消息。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:peek-message
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
from-sequence-number long 从其开始扫视的序列号。
message-count int 要速览的消息数量的上限。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 有更多消息

0xcc: 无内容 – 没有更多消息
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
messages 映射列表 消息列表,其中每个映射表示一条消息。

代表消息的映射必须包含以下条目:

值类型 必须 值内容
message 字节的数组 AMQP 1.0 连线编码消息。

计划消息

计划消息。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:schedule-message
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
messages 映射列表 消息列表,其中每个映射表示一条消息。

代表消息的映射必须包含以下条目:

值类型 必须 值内容
message-id 字符串 amqpMessage.Properties.MessageId 为字符串
session-id 字符串 amqpMessage.Properties.GroupId as string
partition-key 字符串 amqpMessage.MessageAnnotations.”x-opt-partition-key"
message 字节的数组 AMQP 1.0 连线编码消息。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败。
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

密钥 值类型 必须 值内容
sequence-numbers 长整数的数组 计划消息的序列号。 序列号用于取消操作。

取消计划消息

取消计划消息。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:cancel-scheduled-message
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
sequence-numbers 长整数的数组 要取消的计划消息的序列号。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败。
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

密钥 值类型 必须 值内容
sequence-numbers 长整数的数组 计划消息的序列号。 序列号用于取消。

会话操作

会话续订锁

按照实体说明中指定的时间延长消息的锁定。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:renew-session-lock
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
session-id 字符串 会话 ID。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 有更多消息

0xcc: 无内容 – 没有更多消息
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

密钥 值类型 必须 值内容
expiration timestamp 新到期日。

速览会话消息

在不锁定的情况下速览会话消息。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:peek-message
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
from-sequence-number long 从其开始速览的序列号。
message-count int 要扫视的消息的最大数目。
session-id 字符串 会话 ID。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 有更多消息

0xcc: 无内容 – 没有更多消息
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

密钥 值类型 必须 值内容
messages 映射列表 消息列表,其中每个映射表示一条消息。

代表消息的映射必须包含以下条目:

值类型 必须 值内容
message 字节的数组 AMQP 1.0 有线编码消息。

设置会话状态

设置会话的状态。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:peek-message
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
session-id 字符串 会话 ID。
session-state 字节的数组 不透明的二进制数据。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

获取会话状态

获取会话的状态。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:get-session-state
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
session-id 字符串 会话 ID。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
session-state 字节的数组 不透明的二进制数据。

枚举会话

消息传送实体上的枚举会话。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:get-message-sessions
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
last-updated-time timestamp 筛选,以便仅包含在给定时间后更新的会话。
skip int 跳过会话数量。
top int 会话数量的上限。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 有更多消息

0xcc: 无内容 – 没有更多消息
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
skip int 状态代码为 200 时的已跳过会话的数量。
sessions-ids 字符串的数组 状态代码为 200 时的会话 ID 的数组。

规则操作

添加规则

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:add-rule
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
rule-name 字符串 规则名称,不包括订阅和主题名称。
rule-description 映射 如下一部分中指定的规则描述。

rule-description 映射必须包含以下条目,其中 sql-filter 和 correlation-filter 互斥:

值类型 必须 值内容
sql-filter 映射 sql-filter,如下一部分中所指定。
correlation-filter 映射 correlation-filter,如下一部分中所指定。
sql-rule-action 映射 sql-rule-action,如下一部分中所指定。

sql-filter 映射必须包含以下条目:

值类型 必须 值内容
expression 字符串 Sql 筛选器表达式。

correlation-filter 映射至少必须包含以下条目之一:

值类型 必须 值内容
correlation-id 字符串
message-id 字符串
to 字符串
reply-to 字符串
label 字符串
session-id 字符串
reply-to-session-id 字符串
content-type 字符串
properties 映射 映射到服务总线 BrokeredMessage.Properties

sql-rule-action 映射必须包含以下条目:

值类型 必须 值内容
expression 字符串 Sql 操作表达式。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

删除规则

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:remove-rule
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
rule-name 字符串 规则名称,不包括订阅和主题名称。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

延迟的消息操作

按序列号接收

按序列号接收延迟的消息。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:receive-by-sequence-number
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
sequence-numbers 长整数的数组 序列号。
receiver-settle-mode ubyte AMQP 核心 v1.0 中指定的“接收方结算”模式。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

响应消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
messages 映射列表 映射列表,其中的每个映射都代表一条消息。

代表消息的映射必须包含以下条目:

值类型 必须 值内容
lock-token uuid receiver-settle-mode 为 1 时的锁令牌。
message 字节的数组 AMQP 1.0 连线编码消息。

更新处置状态

更新延迟消息的处置状态。

请求

请求消息必须包含以下应用程序属性:

值类型 必须 值内容
operation 字符串 com.microsoft:update-disposition
com.microsoft:server-timeout uint 操作服务器超时以毫秒为单位。

请求消息正文必须包含 amqp-value 部分,其中所含映射必须包括以下条目:

值类型 必须 值内容
disposition-status 字符串 已完成

已放弃

已暂停
lock-tokens uuid 的数组 用于更新处置状态的消息锁令牌。
deadletter-reason 字符串 如果处置状态设置为 已挂起,可进行设置。
deadletter-description 字符串 如果处置状态设置为 已挂起,可进行设置。
properties-to-modify 映射 要修改的服务总线中转消息属性的列表。

响应

响应消息必须包含以下应用程序属性:

值类型 必须 值内容
statusCode int HTTP 响应代码 [RFC2616]

200: 正常 – 成功,其他表示失败
statusDescription 字符串 状态的说明。

后续步骤

若要了解有关 AMQP 和服务总线的详细信息,请访问以下链接: