以下是我如何通过 OpenWire 协议(protocol)订阅消息队列:
import java.io.FileWriter;
import java.io.PrintWriter;
import javax.jms.*;
//..........
subscriberPublishSubscribe = new Subscriber();
subscriberPublishSubscribe.create(URL, "login", "pass", TOPICNAME, SUBSCRIPTIONID);
//.......
Connection connection = factory.createConnection();
connection.setClientID(clientId);
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic(topicName);
messageConsumer = session.createDurableSubscriber(topic, subId);
JMSMessageListener listener = new JMSMessageListener();
messageConsumer.setMessageListener(listener);
connection.start();
如何使用 JMSType
类过滤消息?这是我可能需要使用的代码:
Message msg = session.createMessage();
msg.setJMSType("some_jms_type");
// What's next?
再次强调,我是订阅者,而不是生产者,因此我只想接收仅具有特定JMSType
的消息。
最佳答案
从您的问题陈述中有点不清楚,但听起来您想根据消息的设置 JMSType 来过滤消息,这是使用 JMS selector 完成的表达式传递到 createConsumer 方法中。
您创建选择器表达式来过滤您想要的内容,例如:
JMSType = 'car' AND color = 'blue' AND weight > 2500
但请记住,消息代理不是数据库,将其视为数据库通常会导致失败。
快速 Google 一下“JMS 消息选择器”将为您提供有关该主题的大量阅读内容。
关于java - 如何在Java中将JMSType设置为订阅者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34975191/