事件驱动架构中的消息排序

问题描述 投票:0回答:1

考虑有 3 个微服务 - s1s2s3

s1 发送消息

m1

s2消费消息

m1
,应用一些业务逻辑,然后发送消息
m2

问题是s3在消息

m2
之前收到消息
m1

我试图通过互联网找到解决方案,但我无法找到任何相关的文章或资源。

如何解决消息乱序的问题?

java rabbitmq microservices distributed-system event-driven-design
1个回答
0
投票

我看到两种解决方案。

第一个解决方案是jAC建议的。服务

s2
接收消息
m1
,应用一些逻辑,然后发出封装消息
m2
的消息
m1
。该服务
s3
仅消费
m2
消息,因此不存在消息排序问题。

第二个解决方案是“尝试直到准备好”。服务

s3
消耗消息
m1
m2
。当服务
s3
收到消息
m2
时,它会检查是否已经收到相应的消息
m1
。如果是,则服务
s3
处理消息
m2
。如果没有,它会等待一秒钟,然后重试。相应的消息
m1
应该会在很短的时间内到达,所以在等待时阻塞一般是可以的。当然,服务
s3
必须独立消费
m1
m2
消息!

© www.soinside.com 2019 - 2024. All rights reserved.