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

问题描述 投票:0回答:1

我有以下场景:

  • 一个制作人服务
  • 动态消费者服务量
  • 消息包含具有特定产品的任务,因此一旦消费者x处理产品y的消息。将来x应该处理产品y的所有消息。理想情况下,生产者服务应该在只有消费者x读取的队列上发送产品x的所有消息。
  • 为了均匀地划分工作量,应该有一种方法,一旦需要管理新产品,下一个可用的消费者接受它。(我想一个所有消费者正在读取的队列)

我的方法:

  • 交换机在所有消费者正在消费的“newProduct”队列中发送新产品作业。
  • 读取此类消息的消费者y通知生产者服务(在单独的队列中)他现在负责产品x。
  • 然后,生产者将产品x的所有消息发送到适合消费者y的队列。
  • 当新的消费者服务z上线时,它通知特定队列中的生产者服务他在线,以便生产者可以在交换中为z的正确队列创建绑定。

问题:

  • 我的方法是解决问题的好方法,还是我错过了以较简单的方式解决问题的rabbitmq解决方案?
  • 如何在运行时向交换添加新队列?
rabbitmq messaging messagebroker
1个回答
1
投票

交换机在所有消费者正在消费的“newProduct”队列中发送新产品作业。

这对我来说很好看。

读取此类消息的消费者y通知生产者服务(在单独的队列中)他现在负责产品x。这也没关系,我想如果生产者没有收到产品X被处理的通知,它将需要做一些事情。然后,生产者将产品x的所有消息发送到适合消费者y的队列。

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

当新的消费者服务z上线时,它通知特定队列中的生产者服务他在线,以便生产者可以在交换中为z的正确队列创建绑定。

你可以这样做,但我会做不同的事情:

当消费者上线时,它将自己创建所需的队列(或订阅现有队列)。

我觉得这样:

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

确保您的消费者具有一定的高可用性,否则当您的消费者开始处理某些消息然后已经死亡时,您可能会遇到这种情况,而生产商正在继续为现在未处理的产品发送消息。

© www.soinside.com 2019 - 2024. All rights reserved.