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

我可以使用Java在Solace中使用通配符订阅持久主题端点吗?,java,solace,Java,Solace,其思想是只通过pub/sub(无队列)和使用持久传递模式将消息发送到topic并以条带形式使用它们。为简单起见,让我们假设生产者将消息发布到具有以下层次结构的特定主题:bus/这里有两个问题 您正在尝试创建名为bus/*/1*的TopicEndpoint。请注意,这是TopicEndpoint的名称,而不是它订阅的主题*不是TopicEndpoint名称的有效字符 TopicEndpoints只允许有一个订阅。这意味着您只能订阅bus/*/0*。如果你想订阅bus/*/0*一直到bus/*/9*

其思想是只通过pub/sub(无队列)和使用持久传递模式将消息发送到topic并以条带形式使用它们。为简单起见,让我们假设生产者将消息发布到具有以下层次结构的特定主题:
bus/这里有两个问题

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

  • TopicEndpoints
    只允许有一个订阅。这意味着您只能订阅
    bus/*/0*
    。如果你想订阅
    bus/*/0*
    一直到
    bus/*/9*
    你需要使用
    队列而不是
    TopicEndpoint


  • 这很有帮助,谢谢。然而,看起来我必须首先以管理方式创建持久主题端点(从CLI或SolAdmin管理),然后我可以使用*将此主题端点订阅到主题条带。这非常类似于使用队列和主题到队列映射,即通过管理方式创建队列,并使用*将其订阅到主题条带。唯一的区别是队列可能允许多个主题条带。还有其他区别吗?您可以使用
    JCSMPSession.provision()
    以编程方式创建端点,然后对其应用订阅。队列比主题端点灵活得多,是大多数应用程序的推荐方法。主题端点的使用应限于JMS应用程序。有关队列和主题端点功能的完整列表,请参阅文档。
        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)