RabbitMQ:在使用者关闭时发布消息,以后使用者无法使用没有命名队列的消息

时间:2018-12-20 06:45:55

标签: rabbitmq spring-rabbitmq

我有一个生产者和一个消费者。 使用者的多个实例正在运行。生产者发布消息时,我的意图是在所有实例中使用该消息。因此,我正在使用直接交换。生产者将消息发布给与主题的直接交换。消费者正在使用排他性队列来收听该主题。当消费者启动并且生产者发布消息时,此过程运行良好。但是,当消费者情绪低落并且生产者发布消息时,消费者在情绪高涨时并不会消耗此消息。

我搜索了这个问题。建议使用命名队列。但是,如果我使用命名队列,则会按照循环算法使用消息。那不符合我所有消费者都消费相同消息的期望。

还有其他解决方法吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您的问题有两种解决方案。

使用命名队列是其中之一。 将交换设置为扇出模式,并将您的命名队列订阅给它。这样做,当发布者在您的交换中发送消息时,它将被分派到所有正在侦听的队列中。

然后,每个队列可以有一个或多个使用者(允许您扩展)。您必须定义一个命名队列/使用者。当一个消费者断开连接时,他的队列仍然可以接收消息,而当他回来时,他可以使用它们。

您应该可以那样做。

另一种方式是您的个人知识更多,因为您说过要使用RabbitMQ。但是在这种情况下,您可以使用Kafkha,那么您的消费者可以在重新连接后恢复到断开连接时的消息索引。

如果不起作用,请及时更新:)