【发布时间】:2021-10-19 08:54:59
【问题描述】:
我们使用 SQS 对我们公司的用例进行排队。所有开发人员都连接到同一个队列以进行本地开发。如果我们在本地开发中生成一些用于测试的消息,则消息可能会在其他人的本地运行的消费者上消费,如果该人同时运行应用程序。
您如何确保一个人生成的消息不会因在其他人本地运行的消费者上的消费而丢失。为每个人使用不同的队列是唯一的解决方案吗?想知道业界遵循什么标准来避免这种情况?
【问题讨论】:
我们使用 SQS 对我们公司的用例进行排队。所有开发人员都连接到同一个队列以进行本地开发。如果我们在本地开发中生成一些用于测试的消息,则消息可能会在其他人的本地运行的消费者上消费,如果该人同时运行应用程序。
您如何确保一个人生成的消息不会因在其他人本地运行的消费者上的消费而丢失。为每个人使用不同的队列是唯一的解决方案吗?想知道业界遵循什么标准来避免这种情况?
【问题讨论】:
这是非常开放的 IMO。建议添加一些关于您如何使用 SQS 的上下文。
但据我所知: 是的,我建议为每个“开发者”创建队列
或
虽然不优雅,但您可以使用开发人员的用户名添加 SQS 消息属性(这是消息正文以外的元数据)。 然后,每个开发人员都应该只处理适合他们的消息。可以说,您也可以在消息本身中添加一个标志,但是,我不确定您的消息格式的限制。消息属性旨在用于这些情况,您想知道是否真的需要在解析消息正文之前处理消息。
但是您必须将 maxReceives 增加到一个较大的数字(如果您配置了死信队列,则该消息不会移动到死信队列)。这并不详尽,它只会减少您的消息被其他人删除的机会。因为如果说有 10 个人读了消息并且因为 username 不是他们的用户名而没有删除它,并且 maxReceives 是 8,它仍然会移动到 DLQ 并造成不必要的混乱。
【讨论】: