我正在使用Java API连接到Solace,提供队列并将它们订阅到主题。如果这些队列已经存在,我想避免再次这样做。使用Java API可以检查特定队列是否存在以及哪些主题映射到该队列?
答案 0 :(得分:0)
执行此操作的最佳方法是尝试配置并使用JCSMPSession.FLAG_IGNORE_ALREADY_EXISTS
和JCSMPProperties.IGNORE_DUPLICATE_SUBSCRIPTION_ERROR
属性。
这是一个简单的例子:
JCSMPProperties properties = new JCSMPProperties();
properties.setProperty(JCSMPProperties.HOST, "your_router_dns_name");
properties.setProperty(JCSMPProperties.USERNAME, "default");
properties.setBooleanProperty(JCSMPProperties.IGNORE_DUPLICATE_SUBSCRIPTION_ERROR, true);
JCSMPSession session = JCSMPFactory.onlyInstance().createSession(properties);
Queue queue = JCSMPFactory.onlyInstance().createQueue("myqueue");
EndpointProperties props = new EndpointProperties(); // default properties, modify as needed
session.provision(queue, props, JCSMPSession.FLAG_IGNORE_ALREADY_EXISTS);
Topic topic = JCSMPFactory.onlyInstance().createTopic("my/topic");
session.addSubscription(queue, topic, JCSMPSession.WAIT_FOR_CONFIRM);
请注意,没有实际方法可以验证使用API是否存在队列和主题订阅。如果绝对必要,您可以使用SEMP over message bus来执行show
命令,但这非常笨拙。