Message queue 更新相同资源的多个队列使用者
我有一个队列,它接收导致重新计算一个或多个共享资源的“事件”消息。这些消息的顺序在特定资源中很重要,队列可以在任何时候包含同一资源的多条消息 我希望在设计系统时,将来可以添加多个使用者(即扇出),而不必担心消息被无序处理(同样针对它们所属的特定资源) 我可以想出几种方法来解决这个问题,包括资源锁和批量处理每个资源的未完成消息,但我的问题是:是否有一个现有的模式或白皮书来描述这个问题的解决方案Message queue 更新相同资源的多个队列使用者,message-queue,amazon-sqs,Message Queue,Amazon Sqs,我有一个队列,它接收导致重新计算一个或多个共享资源的“事件”消息。这些消息的顺序在特定资源中很重要,队列可以在任何时候包含同一资源的多条消息 我希望在设计系统时,将来可以添加多个使用者(即扇出),而不必担心消息被无序处理(同样针对它们所属的特定资源) 我可以想出几种方法来解决这个问题,包括资源锁和批量处理每个资源的未完成消息,但我的问题是:是否有一个现有的模式或白皮书来描述这个问题的解决方案 问题是技术不可知,但我将使用SQS。您的事件将需要某种类型的每个资源的序列号,以允许消费者确定何时收到顺
问题是技术不可知,但我将使用SQS。您的事件将需要某种类型的每个资源的序列号,以允许消费者确定何时收到顺序错误的消息。这方面的一个很好的参考是模式 您将需要一些存储(例如,数据库),这些存储由扩展的使用者共享,最后处理的消息的序列号保留在那里,以便每个使用者都能一致地查看最后处理的消息是什么。(您可能已经为您的消费者提供了一些共享存储,用于邮件重复数据消除和域数据。) 有了这些,您就有了几个选择:
- 实施一项计划。这听起来像是您在问题中提到的“每个资源批量处理未完成的消息”的想法。这种模式的一个缺点是,您可能需要格外小心,以确保重新排序器以持久的方式存储消息。这可能比它的价值更麻烦
- 我认为存在一个简单得多的解决方案:如果消费者确定它收到的消息顺序不正确,它就不会处理该消息,也不会将其从队列中删除。在SQS可见性超时过期之前,消费者不会再次收到该消息。在此期间,可以接收和处理序列中的其他消息。一旦可见性超时过期,旧消息将再次可供处理,此时它可能是序列中的下一条消息。如果没有,它将留在队列中,直到处理序列中的下一条消息李>