Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么activeMQ接收方类不能从发送方类接收所有消息_Java_Activemq - Fatal编程技术网

Java 为什么activeMQ接收方类不能从发送方类接收所有消息

Java 为什么activeMQ接收方类不能从发送方类接收所有消息,java,activemq,Java,Activemq,我正在使用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); }

我正在使用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条。如果我使用
consumer.receive(10000)
,我确实会收到5条消息,但是如果发送者发送数百万条消息呢?如何在不丢失一条消息的情况下接收所有消息?

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

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

从ActiveMQ的真实体验中得到的另一个提示是它有缺陷。我会尽量不咆哮,因为这个产品有很多优点。但我已经运行了几台ActiveMQ服务器5年多了,使用了至少同样多的不同版本,我的整个经验是它功能丰富,并且往往在小型测试环境中正常工作,但是在“野外”负载下,它会做各种奇怪的事情,包括丢失消息,存储和转发管道不工作,消息被“隐藏”,直到重启后神奇地重新出现

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

  • “activemq n”作为Google自动完成“activemq负队列大小”中的第三个条目
  • 等等

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

我确实在代码中使用了
MessageConsumer.receive
,您看不到吗?问题是我不能从发送者那里收到全部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());
            }
        }
Think you need some codes as follows : 

 while ((IMessage msg = consumer.receive(2000)) != null) {
    // Process your message 
 }