2016-05-31 94 views
1

我正在运行队列进程,使用Amazons SQS和处理作业的单独机器(工作人员)。我也用supervisor以确保queue:listen始终工人机器上运行,但是当我定义numprocs=8(像laravel的网站为例)的工作正在执行一次,因此电子邮件被发送几次,等”多。SQS重复消息handeling

任何想法即使我正在运行多个工作进程和计算机,我如何确保只执行一次作业?

+0

相关:[这个答案](http://stackoverflow.com/a/38290017/836214) – Krease

回答

1

对于SQS,一旦工人拿到一件物品 - 工人有责任立即从SQS中删除物品,以便其他工人也不会收到物品。

文档的这一部分解释了什么的,你所允许的时间量,删除的项目 - http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

既然你没有显示你的电子邮件发送Laravel工人的代码,我只能猜测,您并不是立即删除SQS项目,而是可能仅在电子邮件发送后才删除它。如果该电子邮件发送的部分会比SQS可见性超时(链接文档中描述)以上,这将使意义相同的任务由其他工人接走。

+0

此外,请求计数器将增加在下次工作人员提出要求。这是用于清理或重新运行某个任务的良好指示器。 – mootmoot