跳到主要内容

在PubSub+ JCSMP API中为端点添加订阅

通常情况下,消息是通过设置为消息的目的地而发布到队列中的。然而,您也可以向队列添加主题订阅,以便它接收发布到匹配主题目的地的任何消息。

如下面的图所示,当向队列添加主题订阅时,发布到主题的消息可能会被发送到队列、主题端点,以及直接发送到消息总线,在那里它可以与客户端的主题订阅进行匹配。

发布到主题的消息的可能路由

img

向队列添加订阅

客户端可以在绑定到队列与否的情况下添加或移除主题订阅,但队列必须至少具有修改主题的权限(参阅为非所有者客户端配置权限),客户端才能向其添加主题订阅或从中移除主题订阅。

客户端无法移除管理员通过 Solace CLI 或 SolAdmin 添加到队列的主题订阅。

当队列被删除时,该队列的所有主题到队列的映射也会被删除。

如果持久或非持久消息发布到与队列的订阅匹配的主题,但事件代理无法在队列上持久化该消息(例如,如果消息大小超过队列配置的大小限制,或者队列超出配额),则该消息将被丢弃。发布者是否收到拒绝(NACK)取决于队列的 reject-msg-to-sender-on-discard 设置,默认情况下在事件代理上是启用的。有关详细信息,请参阅配置消息丢弃处理。

要向队列添加主题订阅,请调用 JCSMPSession.addSubscription(...) 方法,并传入队列名称以及您要添加到该队列的主题。

可以设置的订阅标志包括:

  • 等待确认
  • 请求确认(针对 Java RTO、C 和 .NET)

有关如何向队列添加主题订阅的示例,请参阅 Solace 开发者中心上的 TopicToQueueMapping 示例。

向队列添加订阅异常

要向给定的持久消息队列添加主题订阅异常,以便不将发布到主题的保证消息投递到队列,请重复添加订阅的步骤,并在主题名称前添加一个感叹号("!")作为前缀。换句话说,使用相同的调用创建订阅,并传入带有感叹号前缀的主题参数(形式为 !a/b/c)。

订阅异常默认是启用的。如果禁用了订阅异常,则感叹号("!")将被视为普通字符。有关启用和禁用订阅异常的更多信息,请参阅系统级订阅异常配置。

从端点移除订阅

要移除添加到队列或主题端点的主题订阅,请调用 JCSMPSession.removeSubscription(...) 方法,并传入队列或主题端点、订阅以及任何使用的订阅标志。