考虑有 3 个微服务 - s1、s2 和 s3。
s1 发送消息
m1
。
s2消费消息
m1
,应用一些业务逻辑,然后发送消息m2
。
问题是s3在消息
m2
之前收到消息m1
。
我试图通过互联网找到解决方案,但我无法找到任何相关的文章或资源。
如何解决消息乱序的问题?
我看到两种解决方案。
第一个解决方案是jAC建议的。服务
s2
接收消息 m1
,应用一些逻辑,然后发出封装消息 m2
的消息 m1
。该服务s3
仅消费m2
消息,因此不存在消息排序问题。
第二个解决方案是“尝试直到准备好”。服务
s3
消耗消息 m1
和 m2
。当服务s3
收到消息m2
时,它会检查是否已经收到相应的消息m1
。如果是,则服务 s3
处理消息 m2
。如果没有,它会等待一秒钟,然后重试。相应的消息m1
应该会在很短的时间内到达,所以在等待时阻塞一般是可以的。当然,服务s3
必须独立消费m1
和m2
消息!