跳到主要内容

创建持久主题订阅者

TopicSubscriberMessageConsumer 的一个子接口,是发布/订阅形式的消息消费者。

客户端可以使用持久 TopicSubscriber 对象来接收发布到主题目标的消息。即使该客户端未连接,持久主题订阅者也能确保消息由 JMS 代理维护,直到被消费的持久主题订阅者确认,或者直到它们过期。

要在事件代理上创建持久主题订阅和持久主题订阅者,必须启用保证消息和消息转储,并且,如果使用设备,则必须安装 ADB。

要创建持久主题订阅者,请从会话调用以下方法:

session.createDurableSubscriber(Topic topic, java.lang.String name, java.lang.String messageSelector, boolean noLocal)

其中:

  • topic 是要订阅的主题。有关支持的主题语法规则的信息,请参阅主题支持与语法。
  • name 是用于标识持久主题订阅者的名称。名称最多可以有 200 个字符(唯一无效的字符是 <>\*?&;)。在 MessageVPN 中,每个持久主题订阅者必须是唯一的。JNDI 提供程序使用的持久主题订阅者名称相当于也可以通过 SolAdmin 或 Solace CLI 创建的持久主题端点(参阅 Solace JNDI 对象)。
  • messageSelector 是消息选择器表达式。只有具有匹配标头字段和属性的消息才会被传递。值为 null 或空字符串表示没有消息选择器。
  • noLocal 是一个属性,用于指定订阅者是否可以接收与其订阅匹配的消息,如果这些消息是在同一连接上发布的。(换句话说,是否允许客户端消费它自己发布的消息,当这些消息与其主题订阅匹配时。)要防止在同一连接上传递发布的消息,请为订阅者启用 NoLocal 属性(默认值为 false)。

要创建持久主题订阅者,必须在事件代理上配置主题订阅(即,持久主题端点)。此持久主题订阅的作用是吸引发布到主题的消息。一次只能有一个会话使用特定持久订阅的主题订阅者。

如果已经在事件代理上配置了主题订阅(通过 SolAdmin 或 CLI),当您调用 createDurableSubscriber(...) 方法并传入物理订阅的名称时,将创建该订阅的一个实例(即,在 API 中该订阅的内存表示)。

如果尚未在事件代理上配置持久主题订阅,当您调用 createDurableSubscriber(...) 方法并传入订阅名称时,如果允许创建动态持久端点,则会在事件代理上创建一个持久主题订阅。(如果不允许创建动态持久端点,则会抛出 JMSException。)

要允许创建动态持久端点,可以将 InitialContext 环境属性 SupportedProperty.SOLACE_JMS_DYNAMIC_DURABLES 设置为 true。您也可以使用 SolAdmin 或 CLI 在 JNDI 中启用等效的连接工厂属性。