RabbitMq:具有直接绑定的动态使用者数

RabbitMq:具有直接绑定的动态使用者数,rabbitmq,messaging,messagebroker,Rabbitmq,Messaging,Messagebroker,我有以下情况: 一种生产性服务 消费者服务的动态数量 消息包含特定产品的任务,因此一旦消费者x处理产品y的消息。将来x应该处理产品y的所有消息。理想情况下,生产者服务应该在只有消费者x读取的队列上发送产品x的所有消息 为了平均分配工作负载,应该有一种方法,一旦需要管理一个新产品,下一个可用的消费者就会接受它。(我假设一个所有消费者都在读取的队列) 我的做法: exchange在“newProduct”队列中发送新产品作业,所有消费者都从该队列中消费 读取此类消息的消费者y通知生产者服务(

我有以下情况:

  • 一种生产性服务
  • 消费者服务的动态数量
  • 消息包含特定产品的任务,因此一旦消费者x处理产品y的消息。将来x应该处理产品y的所有消息。理想情况下,生产者服务应该在只有消费者x读取的队列上发送产品x的所有消息
  • 为了平均分配工作负载,应该有一种方法,一旦需要管理一个新产品,下一个可用的消费者就会接受它。(我假设一个所有消费者都在读取的队列)

我的做法:

  • exchange在“newProduct”队列中发送新产品作业,所有消费者都从该队列中消费
  • 读取此类消息的消费者y通知生产者服务(在单独的队列中),他现在负责产品x
  • 然后,生产者将产品x的所有消息发送到消费者y的队列
  • 当新的消费者服务z联机时,它会通知特定队列上的生产者服务他已联机,以便生产者可以在exchange for z的适当队列中创建绑定

问题:

  • 我的方法是解决问题的好方法,还是我缺少了能够以较不复杂的方式解决问题的rabbitmq解决方案?
  • 如何在运行时将新队列添加到exchange
exchange在“newProduct”队列中发送新产品作业,所有作业都将发送到该队列 消费者正在从中消费

我觉得这个不错

读取此类消息的消费者y通知生产者 他现在负责产品x的服务(在单独的队列中)。 这也很好,我想如果制片人没有收到通知的话 产品X得到了处理,它需要做些什么。这个 生产者然后将产品x的所有消息发送到适当的队列中 消费者y

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

当新的消费者服务z上线时,它会通知制作人 因此,他在线的特定队列上的服务 生产者可以在exchange for z的适当队列中创建绑定

你可以这样做,但我会做得不同:

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

我是这样看的:

  • 消费者在线并订阅新产品队列
  • 收到处理产品Z的消息时:
  • 使用绑定键为自身创建新队列
    product-Z
  • 通知生产商产品Z正在处理中
  • 生产者开始使用路由键
    product-Z
    发送消息,并最终进入消费者队列
确保您的消费者具有一定的高可用性,否则您可能会遇到这样的情况:当您的消费者开始处理某些消息,然后死亡,而生产商继续为尚未处理的产品发送消息