-1
我使用默认端口61616在本地主机上运行ActiveMQ。我在一个名为topic.STUDENTS
的主题中放置了一些消息。我有一个客户端程序,我试图用它来读取主题中的消息。这是程序的主要部分,不能按预期工作。我期待收到一些消息,但我只收到null
。为什么我的JMS客户端不使用主题中的消息?
public void receiveMessages() throws URISyntaxException, JMSException, Exception {
try {
//Create a ConnectionFactory
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
//Create a Connection
Connection connection = connectionFactory.createConnection();
connection.start();
//Create a session
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
//Create the destination (Topic or Queue)
Destination destination = session.createTopic("topic.STUDENTS");
//Create a MessageConsumer from the Session to the Topic or Queue
MessageConsumer consumer = session.createConsumer(destination);
//Wait for a message
Message message = consumer.receive(1000);
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
String text = textMessage.getText();
System.out.println("Received: " + text);
} else {
System.out.println("Received: " + message);
}
consumer.close();
session.close();
connection.close();
} catch(Exception e) {
System.out.println("Caught: " + e);
e.printStackTrace();
}
}
此代码基本上是从猿的ActiveMQ的“Hello World”例如代码:http://activemq.apache.org/hello-world.html
有谁知道为什么我没有收到来自任何主题的消息?这里有一个消息是,我可以通过./activemq browse topic.STUDENTS
命令请参阅主题:
JMS_BODY_FIELD:JMSText = Invention-my-dear-friends-is-93%-perspiration-6%-electricity
JMS_HEADER_FIELD:JMSExpiration = 0
JMS_HEADER_FIELD:JMSMessageID = ID:user-thinkpad-335i-59919-1457977678059-1:1:1:1:3
JMS_HEADER_FIELD:JMSPriority = 4
JMS_HEADER_FIELD:JMSDestination = topic.STUDENTS
JMS_HEADER_FIELD:JMSTimestamp = 1457977678409
JMS_HEADER_FIELD:JMSRedelivered = false
JMS_HEADER_FIELD:JMSDeliveryMode = persistent
我认为你对此可能是正确的。我在创建'Destination'到'createQueue'时改变了对会话参考的调用,并且我收到了我期望的消息。 :D这工作。 – user3870315