我对使用RabbitMQ作为消息队列协议非常陌生,我已经编写了RabbitMQ教程中给出的发送者和消费者工作队列的代码。
[链接:http://www.rabbitmq.com/tutorials/tutorial-two-java.html ]
当我们在发送者之前启动消费者时,上面的事情运行得很好。但是,如果我们在运行发送器之后启动消费者,就会出现问题。这些消息都不会被那些在运行发送器之后启动的消费者使用。在研究了RabbitMQ的架构和AMQP相关的东西之后,它似乎相当困难。
1]有没有可能在发送者之后启动消费者,在发送者接收到队列中的消息后启动消费者?
2]如果这个东西是怎么被done.Is的,有没有什么技巧可以做到这一点?
发布于 2013-08-29 19:02:47
是的,这是可能的。确保在将auto-delete设置为false的情况下声明队列。一旦最后一个消费者取消订阅,如果auto-delete设置为true,那么队列将被删除,并且当您的发送者将消息推送到队列中时,这些消息将丢失。如果auto-delete设置为false,那么在您的消费者取消订阅之后,队列将继续存在,并且您的发送者将能够将消息推送到队列而不会丢失消息。
有关队列的更多信息,请访问http://www.rabbitmq.com/tutorials/amqp-concepts.html#queues
发布于 2013-08-29 19:08:10
我认为在第一种情况下(首先启动消费者),消费者正确地创建/注册了它想要在RabbitMQ服务器上侦听的队列。因此,当发送者发送时,它能够接收到它。
在第二种情况下,可能发生的情况是发送者试图发送到一个不存在/未创建的队列,并转到默认/死信。
我建议您打开RabbitMQ管理控制台,查看队列是否创建正确。
https://stackoverflow.com/questions/18508853
复制相似问题