如果consumer.setMessageListener(myListener)是否可行以及它如何工作,我想实时地将JMS消息加载到队列中。
我不确定收听者的工作方式。我写了一个如下的监听器。
public class JmsMessageListenerExample {
public static void main(String[] args) throws URISyntaxException, Exception {
BrokerService broker = BrokerFactory.createBroker(new URI(
"broker:(tcp://localhost:61616)"));
broker.start();
Connection connection = null;
try {
// Producer
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory(
"tcp://localhost:61616");
connection = connectionFactory.createConnection();
Session session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("customerQueue");
String payload = "Important Task";
Message msg = session.createTextMessage(payload);
MessageProducer producer = session.createProducer(queue);
System.out.println("Sending text '" + payload + "'");
producer.send(msg);
// Consumer
MessageConsumer consumer = session.createConsumer(queue);
consumer.setMessageListener(new ConsumerMessageListener("Consumer"));
connection.start();
} finally {
if (connection != null) {
connection.close();
}
broker.stop();
}
}
运行JmsMessageListenerExample之后,它很快完成,并且没有收到任何消息。听众是否应该继续运行直到我停止它?
答案 0 :(得分:3)
设置JMS消息侦听器时,它将在其自己的线程中异步接收消息(由JMS实现调用)。在您的情况下,您需要防止main
退出并停止您的应用程序,因为在这种情况下,MessageListener将终止。
另外,当您说“将JMS消息实时加载到队列中”时,我想您的意思是“当队列收到JMS消息时,请尽快从队列中吸收它们。”如果是这种情况,那么使用JMS消息侦听器是正确的方法。