【发布时间】:2015-07-29 13:36:42
【问题描述】:
我有一个基于服务的应用程序,它使用带有多个队列和多个使用者的 Amazon SQS。我这样做是为了实现基于事件的架构并解耦所有服务,其中不同的服务对其他系统的状态变化做出反应。例如:
-
注册服务:
- 新用户注册时发出事件“registration-new”。
-
用户服务:
- 当用户更新时发出事件“用户更新”。
-
搜索服务:
- 从队列 'registration-new' 中读取并在搜索中为用户编制索引。
- 从队列“用户更新”中读取并更新搜索中的用户。
-
指标服务:
- 从“registration-new”队列中读取并发送到 Mixpanel。
- 从队列“用户更新”中读取并发送到 Mixpanel。
我遇到了很多问题:
- 在进行轮询时可以多次收到一条消息。我可以将很多系统设计为幂等的,但对于某些服务(例如指标服务)而言,这将更加困难。
- 需要从 SQS 的队列中手动删除一条消息。我曾想过实现一个“消息处理服务”,它在所有服务都收到消息后处理消息的删除(每个服务在处理消息后都会发出一个“消息确认”事件)。
我想我的问题是:我应该使用什么模式来确保我可以为 SQS 中的单个队列拥有多个消费者,同时确保消息也能够可靠地传递和删除。感谢您的帮助。
【问题讨论】:
标签: amazon-web-services amazon-sqs microservices event-based-programming