跳到主要内容

消息消费

在本节中,我们将从高层次了解通过非 JMS API 消费消息时指定源的规则。以下部分将详细介绍:

  • 从持久队列消费
  • 从非持久队列消费
  • 从持久主题端点消费
  • 从非持久主题消费
  • 客户端删除持久主题端点

有关在附加帧中设置源的详细规则,请参阅源指定规则。

从持久队列消费

客户端可以通过以下格式绑定到持久队列:

queue://queue-name

链接源持久性属性应设置为 Configuration,过期策略应设置为 NEVER

如果队列在事件代理上不存在,并且客户端的客户端配置文件允许他们创建保证端点,则队列将自动在事件代理上创建为独占队列。如果需要非独占队列,可以使用事件代理上的 copy-from 模板来覆盖此默认行为。

queue:// 前缀是可选的,且不区分大小写。如果链接地址中没有找到前缀,并且地址不以 # 开头,事件代理将假设客户端尝试绑定到持久队列,除非使用了其他设置来指定目标类型。

从非持久队列消费

根据使用的 API,客户端可以通过以下格式从非持久队列消费:

AMQP_NULL

empty_string

并将源动态标志设置为 true。附加响应将包含一个临时队列,#P2P/QTMP/queue-name,在附加响应源地址中。

从持久主题端点消费

客户端可以通过以下格式绑定到持久主题端点(DTE):

dsub://topic-string

topic://topic-string

链接源持久性属性必须设置为 Configuration,过期策略必须设置为 NEVER

DTE 名称在附加帧的链接名称中指定,DTE 上的主题订阅在 dsub://topic:// 前缀后的源地址中指定。

并非所有非 JMS API 都允许应用程序设置识别 DTE 所需的链接名称。当应用程序不能指定链接名称时,不建议使用 DTE,因为这可能导致在事件代理上创建无法被应用程序识别的 DTE 并导致泄漏。

JMS 关于更改分配给 DTE 的主题的语义适用。例如,如果客户端使用与 DTE 已关联的订阅不同的订阅绑定到 DTE,则 DTE 上现有的排队消息将被删除,现有的订阅将从端点中移除,并将新订阅应用于端点。

如果 DTE 在事件代理上不存在,并且客户端的客户端配置文件允许他们创建保证端点,则 DTE 将自动在事件代理上创建为独占 DTE。如果需要非独占 DTE,可以使用事件代理上的 copy-from 模板来覆盖此默认行为。

从非持久主题消费

客户端可以通过以下格式从非持久主题消费:

topic://topic-string

客户端删除持久主题端点

AMQP 客户端可以通过附加一个 AMQP 接收器链接来删除客户端创建的持久主题端点(DTE),其中链接名称为 dte_name,附加帧的源为 null,然后关闭链接。事件代理的附加响应将有一个空的源,表示 DTE 存在并将被删除,或者有一个空的源,表示提供的链接名称的 DTE 在事件代理上不存在。