SQS 重复消息处理

SQS Duplicate messages handling

我是 运行 使用 Amazons SQS 的队列进程和处理作业的单独机器(工作人员)。我还使用 supervisor 来确保工作机器上的 queue:listen 始终是 运行,但是当我定义 numprocs=8 时(如 laravel 上的示例的网站)作业被执行了不止一次,因此电子邮件被发送了几次等等”。

知道如何确保一个作业只执行一次,即使我是 运行 多个工作进程和机器吗?

使用 SQS,一旦工人拿走了一件物品 - 工人有责任立即从 SQS 中删除该物品,这样其他工人就不会也得到该物品。

文档的这一部分解释了允许您删除项目的时间长度 - http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

由于您没有显示您的电子邮件发送 Laravel 工作人员的代码,我只能猜测您不会立即删除 SQS 项目 - 而是可能仅在电子邮件后删除它寄了,送了。如果电子邮件发送部分花费的时间超过 SQS 可见性超时(在 link 文档中描述),则其他工作人员接手相同的任务是有意义的。