Rabbitmq只向一个服务发送消息

tcbh2hod  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(283)

我正在微服务模型上构建应用程序。
让我们说

  • 服务器D1上有一个数据库
  • 在服务器U1上托管了一个用户服务
  • 服务器N1上有通知服务
  • 服务器R1上有rabbitmq服务

通知服务将消息发布到rabbitmq服务,然后rabbitmq服务将消息调度到用户服务,用户服务侦听rabbitmq服务,接收消息并将一些数据写入数据库。
这是完美的工作!
问题是,如果我将用户服务扩展到另一台服务器(比如U2),这意味着用户服务现在同时在两台服务器(即U1和U2)上运行(由Nginx负载平衡器支持)并且用户服务现在监听RabbitMQ服务,将接收从通知服务分派的消息,并且两者都将写入数据库(我不想这样)。我只想让其中一个用户服务(即U1或U2)将数据写入数据库。
所以,我想知道rabbitmq是否可以将消息发送到任何一个用户服务,而不是两个?或者我使用的方法完全错误?

p8ekf7hl

p8ekf7hl1#

我认为您可以使用单个主动消费者选项
单个活动使用方允许一次只有一个使用方从队列中使用,并在活动使用方被取消或死亡时故障切换到另一个已注册的使用方。
1.在同一队列上注册U1和U2

  1. U1将注册为单个活动消费者
    1.如果U1死亡/取消,它将被U2作为单个活动消费者取代,反之亦然
    要使用此选项,请在声明队列时传递x-single-active-consumer参数
    有关详细信息,请阅读文档。
    参考:RabbitMQ消费者单个活动消费者

相关问题