我有一个队列接收" event"导致重新计算一个或多个共享资源的消息。这些消息的排序在特定资源中很重要,并且队列在任何时候都可以包含同一资源的多条消息。
我想以这样的方式设计系统,以便将来可以添加多个消费者(即扇出),而不必担心消息被无序处理(对于他们的特定资源而言)属于)
我可以想出几种解决问题的方法,包括资源锁和每个资源批量处理未完成的消息,但我的问题是:是否存在描述此问题解决方案的现有模式或白皮书?
这个问题与技术无关,但我会使用SQS。
答案 0 :(得分:0)
您的事件将需要某种资源的序列号,允许消费者确定他们何时收到无序消息。对此的一个很好的参考是Message Sequence模式。
您将需要一些由扩展的消费者共享的存储(例如,数据库),其中最后处理的消息的序列号保留在那里,以便每个消费者具有对上次处理的消息的一致视图。 (您可能已经为消费者提供了一些共享存储,用于重复数据删除和域数据。)
有了这个,你有几个选择: