1

我对使用 RabbitMQ 作为消息队列协议非常陌生。我已经编写了 RabbitMQ 教程中给出的发送方和消费者工作队列的代码。

[链接:http ://www.rabbitmq.com/tutorials/tutorial-two-java.html ]

当我们在发送者之前启动消费者时,上述事情工作正常。但是如果我们在运行发送方之后启动消费者,就会出现问题。在运行发送方之后启动的那些消费者不会使用任何消息。在研究了 RabbitMQ 的架构和 AMQP 相关的东西之后,似乎相当困难。

1]是否有可能,我们在发送者之后启动消费者,而在发送者收到队列中的消息之后启动消费者?

2]如果是。那么这件事怎么做。有什么技术可以做同样的事情吗?

4

2 回答 2

2

对的,这是可能的。确保在声明队列时将自动删除设置为 false。如果 auto-delete 设置为 true,则一旦最后一个消费者取消订阅,则队列将被删除,并且当您的发件人向其推送消息时,它们将丢失。如果 auto-delete 设置为 false,则在您的消费者取消订阅后队列将继续存在,并且您的发送者将能够将消息推送到队列而不会丢失消息。

在http://www.rabbitmq.com/tutorials/amqp-concepts.html#queues上查找有关队列的更多信息

于 2013-08-29T11:02:47.113 回答
1

我想在第一种情况下(首先启动消费者),消费者正确地创建/注册了它想要在 RabbitMQ 服务器上监听的队列。因此,当发件人发送时,它能够接收到它。

在第二种情况下,可能发生的事情是发件人试图发送到一个不存在/未创建的队列并进入默认/死信。

我建议你可以打开 RabbitMQ 管理控制台,看看队列是否创建正确。

于 2013-08-29T11:08:09.910 回答