服务再次启动后,Rabbitmq 不会发送消息

Rabbitmq won't deliever message after service goes up again

在我的系统中,我使用 spring-cloud-stream 和 RabbitMQ 来发送和接收事件。我启动了 RabbitMQ 运行、service A 并关闭了 service B服务 A服务 B 发送一个事件。然后我打开我的 服务 B,现在我希望 Rabbit 能够交付事件 - 但什么也没有发生。这是正确的行为吗?我是 RabbitMQ 的新手,但我认为它应该保证所有事件最终都会找到它的接收者。我的应用程序很简单,基于 example on github,没有额外的配置。我想念什么?

如果您的消费者没有 group,该队列是一个匿名的自动删除队列。你需要一个团体来坚持。参见 consumer groups

生产者不会将队列绑定到交换器,消费者会。

如果先绑定生产者,再绑定新的消费者组,消息也会丢失

使用 RabbitMQ 绑定器,如果您提前知道消费者组,则可以设置 ...producer.requiredGroups 属性 并绑定队列。

参见 the documentation

requiredGroups

A comma-separated list of groups to which the producer must ensure message delivery even if they start after it has been created (e.g., by pre-creating durable queues in RabbitMQ).