Java 为什么activeMQ接收方类不能从发送方类接收所有消息
我正在使用activeMQ记录一些内容。sender类的主代码如下所示: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); }
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
}