跳到主要内容

消息发布

在本节中,我们将探讨通过非 JMS API 发布消息时指定目标的规则。从高层次来看,基本上需要了解两件事:

  1. 您可以在客户端发送链接附加帧的目标地址中指定目标(队列、主题等)。如果目标非空,则客户端通过该链接发送的所有消息都将使用该目标。
  2. 或者,您可以在每条消息的 propertiesto 字段中指定目标。如果客户端发送链接附加帧中的目标为 null,则每条消息的属性中的 to 字段将用于确定该消息的目标。

虽然这是您需要做的主要内容,但实际操作比这更复杂。在“目标指定规则”中可以找到在附加帧或消息中设置目标的详细规则。如果您在深入了解细节之前想要一些更简洁的信息,可以考虑查看以下内容:

  • 使用 # 指定临时队列和主题
  • 指定持久队列目标
  • 指定主题目标

使用 # 指定临时队列和主题

# 开头的任何目标或订阅都将把该主题视为消息的字面目标。这允许 AMQP 应用程序发布到诸如临时队列(#P2P/QTMP/queue-name)、临时主题(#P2P/TTMP/topic-string)或其他事件代理生成的主题等目标。

临时队列是一个通常由事件代理自动生成名称的非持久队列;同样,临时主题是一个通常由事件代理自动生成的非持久主题。能够发布到这些对象是有用的,因为 AMQP 应用程序可能会从另一个应用程序接收到作为 reply-to 地址的此类对象的地址。

有关在 Solace PubSub+ 事件代理中使用 # 的一般信息,请参阅保留主题。

指定持久队列目标

客户端通过以下格式指定将消息发布到持久队列:

queue://queue-name

queue:// 前缀是可选的,且不区分大小写。

如果目标中没有前缀,并且目标不以 # 开头,事件代理将假设消息旨在传递到持久队列,除非使用了其他设置来指定目标类型。

有关如何设置持久队列目标的详细规则,请参阅目标指定规则。

指定主题目标

客户端通过以下格式指定将消息发布到主题:

topic://topic-string

在发布到主题时推荐使用 topic:// 前缀,且不区分大小写。如果目标中没有前缀,并且目标不以 # 开头,事件代理将假设消息旨在传递到队列,除非使用了其他设置来指定目标类型。

有关如何设置主题目标的详细规则,请参阅目标指定规则。