0

我正在使用 activeMQ 记录一些东西。sender类的主要代码是这样的:

for (int i = 1; i <= 5; i++) {
        TextMessage message = session.createTextMessage("ActiveMq send" + i);
        System.out.println("send msg:" + "ActiveMq send" + i);
        producer.send(message);
    }

然后我使用另一个接收器接收来自发件人的 5 消息。

MessageConsumer consumer = session.createConsumer(destination);
        while (true) {// loop to receive message
            TextMessage message = (TextMessage) consumer.receive();
            if (null != message) {
                System.out.println("received msg:" + message.getText());
            }
        }

如果我这样写,我只能收到一两条消息,而不是 5。如果我使用consumer.receive(10000),我真的会收到 5 条消息,但如果发件人发送数百万条消息怎么办?如何在不丢失的情况下全部接收?

4

3 回答 3

1

@Evgeniy 是对的 - MessageConsumer.receive() 正确的调用,或者您可以使用侦听器。

来自 ActiveMQ 实际经验的另一个提示是它有问题。我会尽量不要咆哮,因为该产品有很多好东西。但是我已经运行了多个 ActiveMQ 服务器超过 5 年,至少使用了许多不同的版本,并且我的整个经验是它功能丰富,并且倾向于在小型测试环境中正常工作,但是在负载下“在野外”它会做各种奇怪的事情——包括丢失消息、存储和转发管道随机不工作,以及消息被“隐藏”,直到它们在重启后神奇地重新出现。

而且我不是唯一经历过这种情况的人:

您看到的任何奇怪行为都只是一个错误,这并非不可能。(但这也很容易 - 很可能您的设置存在其他问题,我们无法从您的帖子中看到。)

于 2013-10-09T04:31:48.897 回答
0

MessageConsumer.receive 应该是您需要的,根据 JMS API,它会无限期地阻塞,直到产生消息。另一种方法是为此消费者设置一个侦听器 - MessageConsumer.setMessageListener(MessageListener listener)

于 2013-10-09T04:13:29.550 回答
0
Think you need some codes as follows : 

 while ((IMessage msg = consumer.receive(2000)) != null) {
    // Process your message 
 }
于 2017-01-23T23:35:27.947 回答