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

时间:2017-11-20 16:50:10

标签: java solace

这个想法是将消息发送到主题并通过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?

1 个答案:

答案 0 :(得分:1)

这里有两个问题。

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

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