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