【问题标题】:Can I subscribe to a durable topic endpoint using wildcards in Solace using Java?我可以使用 Java 在 Solace 中使用通配符订阅持久主题端点吗?
【发布时间】:2017-11-21 10:38:02
【问题描述】:

这个想法是将消息发送到主题并仅通过 pub/sub(无队列)并使用 PERSISTENT 传递模式以条带形式使用它们。为简单起见,假设生产者将消息发布到具有以下层次结构的特定主题:bus/<componentId/<transactionId>

消费者希望接收主题“条带”,为简单起见,假设有 10 个消费者,他们希望通过 transactionId 在彼此之间进行流量条带化:

  • bus/*/0*
  • bus/*/1*
  • ...
  • bus/*/9*

当我尝试使用通配符订阅主题端点时,如下所示:

    DurableTopicEndpoint topicEndpoint = JCSMPFactory.onlyInstance().createDurableTopicEndpoint("bus/*/1*");

    ConsumerFlowProperties propsFlow = new ConsumerFlowProperties();
    propsFlow.setEndpoint(topicEndpoint);

我得到以下异常:

Exception in thread "main" java.lang.IllegalArgumentException: Topic Endpoint name "bus/*/1*" contains illegal character [*]
    at com.solacesystems.common.util.DestinationUtil.isValidEndpointName(DestinationUtil.java:234)
    at com.solacesystems.common.util.DestinationUtil.isValidTopicEndpointPhysicalName(DestinationUtil.java:209)
    at com.solacesystems.common.util.DestinationUtil.isValidDTEPhysicalName(DestinationUtil.java:213)
    at com.solacesystems.jcsmp.impl.SessionModeSupport.createFlow(SessionModeSupport.java:247)
    at com.solacesystems.jcsmp.impl.SessionModeSupport.createFlow(SessionModeSupport.java:170)
    at com.solacesystems.jcsmp.impl.JCSMPBasicSession.createFlow(JCSMPBasicSession.java:953)

鉴于 article 的“向主题端点添加订阅”部分 - 使用 Solace Java API 是否有可能?

【问题讨论】:

    标签: java solace


    【解决方案1】:

    这里有两个问题。

    1. 您正在尝试创建一个名为 bus/*/1*TopicEndpoint。请注意,这是TopicEndpoint 的名称,而不是它订阅的主题。 * 不是 TopicEndpoint 名称的有效字符。

    2. TopicEndpoints 只允许订阅一个。这意味着您只能订阅bus/*/0*。如果您想订阅bus/*/0* 一直到bus/*/9*,您需要使用Queue 而不是TopicEndpoint

    【讨论】:

    • 这很有帮助,谢谢。然而,看起来我必须首先以管理方式创建持久主题端点(从 CLI 或 SolAdmin 管理),然后我可以使用 *.这非常类似于使用队列和主题到队列的映射,即以管理方式创建队列并使用 *.唯一的区别是队列可能允许多个主题条带。还有其他区别吗?
    • 您可以使用JCSMPSession.provision() 以编程方式创建端点,然后对其应用订阅。
    • 队列比主题端点灵活得多,是大多数应用程序的推荐方法。主题端点的使用应仅限于 JMS 应用程序。请参阅文档以获取队列和主题端点功能的完整列表。 docs.solace.com/Features/Endpoints.htm
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-30
    • 2018-09-26
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-11
    • 2018-03-27
    相关资源
    最近更新 更多