RabbitMq:具有直接绑定的消费者的动态数量

RabbitMq: Dynamic number of consumers with direct bindings

我有以下场景:


我的做法:


问题:

An exchange send new product jobs in a "newProduct" queue to which all the consumers are consuming from.

这对我来说很不错。

The consumer y that reads such a message notifies to the producer service (on a separate queue) that he is now in charge of product x. This is also fine, I guess if producer did not receive notification that product X is taken care of it will need to do something. The producer then sends all messages for product x to a queue proper to consumer y.

我将使用相同的路由密钥发送产品 X 的所有消息,例如 product-X。这可能就是你在这里的意思。我会避免告诉生产者现在究竟是谁在处理产品 X。为了更好地分离关注点和简化生产者,应该尽可能少地了解消费者及其队列,反之亦然。

When a new consumer service z goes online, it notifies the producer service on a therefore specific queue that he is online such that the producer can create a binding in the exchange for z's proper queue.

你可以这样做,但我会用不同的方式来做:

消费者上线后,会自行创建需要的队列(或订阅已有队列)。

我是这样看的:

  • 消费者上线并订阅新产品队列。
  • 收到消息处理产品Z时:
  • 使用绑定键为自己创建一个新队列product-Z
  • 通知生产商现在正在处理产品 Z
  • 生产者开始使用路由键 product-Z 发送消息,它们最终进入消费者的队列。

确保您的消费者具有一定的高可用性,否则您可能会遇到这样的情况:您的消费者开始处理一些消息然后死了,而生产者继续为现在未处理的产品发送消息。