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

问题描述:

我正在使用微服务,假设我有3个服务,并且它们都通过JGroup UDP通道相互连接(JGroups可以在它们之间广播消息):在微服务中广播消息并在多个实例中运行一次

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

如果我只有一个服务的实例,一切都很好。但是,例如,如果我有两个服务实例C,它们都会收到该事件,并且它们都将运行自己的过程,并且结果将在数据库中重复(总计两次)。

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

有什么办法可以管理吗?

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

兔MQ,使用扇出交易所因此每个队列将reacieve所有消息。

现在,如果单个微服务的多个实例绑定到相同的队列,那么只有一个实例将能够从该队列中选择一条消息。由于队列的循环性质,

如果您不能使用像RabbitMQ这样的附加服务,请在广播之前在邮件标题中添加主机标识(C实例)。 C实例检查头,如果它的ID存在于它将处理的头中。

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

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