【发布时间】:2018-07-25 06:36:44
【问题描述】:
在分布式面向服务的架构中,假设我有一个生产者,它使用 RMQ 向消费者发送消息。
然后我们决定通过添加更多消费者来横向扩展我们架构的消费部分,但我们面临一些限制。
发布者在它发送的每条消息中都提供一个序列号。消费者根据消息的序列号处理消息,这一点非常重要。
每次处理给定资源时,比如说 A,发布者将发送 RMQ 消息,上面写着“嘿,让我们为 A 做序列 1”,然后“嘿,让我们为 A 做序列 2”等等。
例如,如果发布者为 A 提供 3 条消息,序列为 1、2 和 3,并且这 3 条消息被分发到我们消费者的 3 个不同实例。序列 2 的消息被重新排队,直到序列 1 处理好,序列 3 也一样。
最后,消息都得到了很好的处理,但经过多次重试!这会导致我们的系统出现一些延迟,因为如果我们有 100 个序列要消耗,我们会重试多次。
一种可能的解决方案是确保给定资源的每组序列都必须由同一消费者处理。但是我们如何才能做到这一点呢?
我怎样才能避免重新排队,以确保我们的消费者的每个实例总是得到有序的给定资源的消息?
【问题讨论】:
标签: asynchronous rabbitmq microservices