我使用默认端口61616在localhost上运行ActiveMQ。我将一些消息放在名为topic.STUDENTS
的主题中。我有一个客户端程序,我试图用来阅读主题中的消息。这是程序的主要部分,不能按预期工作。我期待得到一些消息,但我只是收到null
。
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
答案 0 :(得分:2)
默认情况下,主题不会保留邮件,因此如果您在生成邮件后启动了邮件,则在邮件到达之前发送的任何邮件都将消失。如果要使用消费者脱机时生成的消息,则需要在生成消息之前使用队列或在主题上注册持久的主题订阅者。