我可以使用 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:
在他们之间分割流量
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 的部分 "Adding Subscriptions to Topic Endpoints" - Solace Java API 是否完全可行?
这里有两个问题。
您正在尝试创建一个名为 bus/*/1*
的 TopicEndpoint
。请注意,这是 TopicEndpoint
的名称,而不是它订阅的主题。 *
不是 TopicEndpoint
.
名称的有效字符
TopicEndpoints
只允许有一个订阅。这意味着您只能订阅 bus/*/0*
。如果您想一直订阅 bus/*/0*
到 bus/*/9*
,您将需要使用 Queue
而不是 TopicEndpoint
。
想法是将消息发送到主题并仅通过 pub/sub(无队列)并使用 PERSISTENT 传递模式以条带形式使用它们。为简单起见,假设生产者将消息发布到具有以下层次结构的特定主题:bus/<componentId/<transactionId>
.
消费者想要接收主题 "stripes",为简单起见,假设有 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 的部分 "Adding Subscriptions to Topic Endpoints" - Solace Java API 是否完全可行?
这里有两个问题。
您正在尝试创建一个名为
bus/*/1*
的TopicEndpoint
。请注意,这是TopicEndpoint
的名称,而不是它订阅的主题。*
不是TopicEndpoint
. 名称的有效字符
TopicEndpoints
只允许有一个订阅。这意味着您只能订阅bus/*/0*
。如果您想一直订阅bus/*/0*
到bus/*/9*
,您将需要使用Queue
而不是TopicEndpoint
。