【问题标题】:Rabbitmq Sending message to only one serviceRabbitmq 仅向一项服务发送消息
【发布时间】:2022-05-10 15:35:11
【问题描述】:

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

让我们说

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

通知服务向rabbitmq服务发布消息,然后将消息分派给用户服务,用户服务监听rabbitmq服务,接收消息并将一些数据写入数据库。

这很好用!

问题是如果我将用户服务扩展到另一台服务器说 U2,这意味着用户服务现在在两台服务器上运行,即 U1 和 U2(由 nginx 负载平衡器支持)并且两个用户服务现在都在监听 rabbitmq服务,将接收从通知服务发送的消息,并且两者都将写入数据库(我不想要)。我只想要一个用户服务,即 U1 或 U2 将数据写入数据库。

所以,我想知道 rabbitmq 是否可以将消息发送到任何一个用户服务而不是两者?还是我完全使用了错误的方法?

【问题讨论】:

    标签: rabbitmq microservices rabbitmq-exchange


    【解决方案1】:

    我认为您可以使用 Single Active Consumer 选项

    “单个活动消费者允许在一个队列中一次只拥有一个消费者,并在活动消费者被取消或死亡的情况下故障转移到另一个注册消费者。”

    1. 在同一个队列中注册 U1 和 U2
    2. U1 将注册为单一活跃消费者
    3. 如果 U1 死亡/取消,它将被 U2 替换为 Single Active Consumer,反之亦然

    要使用此选项,请在声明队列时传递 x-single-active-consumer 参数

    请阅读文档以获取更多信息。
    参考:RabbitMQ Consumers Single Active Consumer

    【讨论】: