我可以使用 Java 在 Solace 中使用通配符订阅持久主题端点吗?

Can I subscribe to a durable topic endpoint using wildcards in Solace using Java?

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

消费者想要接收主题 "stripes",为简单起见,假设有 10 个消费者,他们希望通过 transactionId:

在他们之间分割流量

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

    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 的部分 "Adding Subscriptions to Topic Endpoints" - Solace Java API 是否完全可行?

这里有两个问题。

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

  2. 名称的有效字符
  3. TopicEndpoints只允许有一个订阅。这意味着您只能订阅 bus/*/0*。如果您想一直订阅 bus/*/0*bus/*/9*,您将需要使用 Queue 而不是 TopicEndpoint