代码之家  ›  专栏  ›  技术社区  ›  user1079877

在微服务中广播消息,并在多个实例中运行一次

  •  1
  • user1079877  · 技术社区  · 7 年前

    我使用的是微服务,假设我有3个服务,它们都通过JGroup UDP通道相互连接(JGroup可以在它们之间广播消息):

     ---            ---  ---
    | A | --msg--> | B || C |
     ---            ---  ---
    

    C ,两者都将接收事件,并且都将运行自己的过程,结果将在数据库中复制(将值求和两次)。

     ---            ---  ---  ---
    | A | --msg--> | B || C || C |
     ---            ---  ---  ---
    

    有什么办法可以解决这个问题吗?

    2 回复  |  直到 7 年前
        1
  •  5
  •   Vijay Parmar    7 年前

    为每个微服务创建一个单独的队列(如果尚未创建)

    在Rabbit MQ中,使用 扇出交换

        2
  •  0
  •   srk    7 年前

    如果无法使用RabbitMQ之类的附加服务,请在广播之前在消息头中添加主机id(哪个C实例)。

    该机制要求每个实例都具有其他运行实例的准确信息。

    您可以通过在C实例之间进行负载平衡来进一步改进。