如何获得ActiveMQ的所有排队的消息?(How to get all enqueued mess

2019-09-17 14:41发布

我想建立一个简单的消费程序(Java)来获得在ActiveMQ的主题库存的所有消息。 我有一个队列发送的TextMessage生产商。

但我不知道怎么开始写我的消费者检索旧消息,并等待新的。

如果你有一个例子,谢谢!

这是我的制片人: http://pastebin.com/uRy9D8mY

这是我的消费者: http://pastebin.com/bZh4r66e

当我将消费者之前运行我的制片人,然后运行消费者,我什么也没得到。 当我跑我的客户随后我的制片人,我在队列中添加72个消息,但我的消费者只拿到24消息...

Answer 1:

我建议阅读本教程(如不阿帕奇的ActiveMQ) 安装Sun JMS教程

有许多方法来写JMS / ActiveMQ的程序,使用各种框架如Spring,或通过使用普通的Java。

从本质上讲,写一个监听器类是这样的:

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文档的帮助来弄明白。



Answer 2:

使用下面你给出的代码可以读取所有的消息队列中的入队。

  • 在此代码while循环是无休止的循环将重复在队列中的所有消息。
  • 一旦在队列中,将等待5秒钟没有消息,则自动停止连接,并打破循环。

如果您需要无休止的消费,这将读取所有每当新添加到队列中的消息,然后取出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人。



文章来源: How to get all enqueued messages in ActiveMQ?
标签: java activemq