我想构建一个简单的消费者程序(在java中)来获取ActiveMQ主题中存储的所有消息。 我有一个生产者,它在队列中发送TextMessage。
但我不知道如何开始编写我的消费者来检索旧消息并等待新消息。
如果你有一个例子,谢谢!
这是我的制片人:http://pastebin.com/uRy9D8mY
这是我的消费者:http://pastebin.com/bZh4r66e
当我在我的消费者之前运行我的生产者,然后运行消费者,我什么也没得到。 当我运行我的消费者然后我的生产者时,我在队列中添加了72条消息,但我的消费者只得到了24条消息...
答案 0 :(得分:3)
我建议阅读本教程(与Apache ActiveMQ一样)SUN Jms tutorial
使用各种框架(如Spring)或使用普通java编写JMS / ActiveMQ程序有很多种方法。
基本上,编写一个这样的监听器类:
public class MyListener implements MessageListener{
public void onMessage(Message message){
// Read and handle message here.
}
}
由于您已经在生成消息,我假设您已连接并正在运行。
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
consumer = session.createConsumer("MyQueue");
listener = new MyListener ();
consumer.setMessageListener(listener);
connection.start();
// At this point, messages should arrive from the queue to your listener.
然后有一些错误处理代码未包含在此示例中,但您应该能够在教程和JMS文档的帮助下找到它。
答案 1 :(得分:1)
使用下面给出的代码,您可以读取队列中已排队的所有消息。
如果你需要一个无休止的消费者,它会在新添加到队列时读取所有消息,然后删除else部分,这样程序就不会终止。
ConnectionFactory factory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection con = factory.createConnection();
Session session = con.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("tmp_queue2");
MessageConsumer consumer = session.createConsumer(queue);
con.start();
while (true) {
Message msg = consumer.receive(5000);
if (msg instanceof TextMessage) {
TextMessage tm = (TextMessage) msg;
System.out.println(tm.getText());
}
else{
System.out.println("Queue Empty");
con.stop();
break;
}
}
希望这个消费者计划能够帮助那些不熟悉ActiveMQ的人。