我正在使用Amazons SQS
和一个处理作业的单独机器(工作人员)运行队列进程。我也使用supervisor
来确保queue:listen
始终在工作计算机上运行,但是当我定义numprocs=8
时(就像laravel网站上的示例一样)工作正在执行一次因此电子邮件被发送了几次等'。
任何想法即使我正在运行多个工作进程和计算机,如何才能确保作业只执行一次?
答案 0 :(得分:0)
使用SQS,一旦工人拿走物品 - 工人有责任立即从SQS中删除该物品,以便其他工人也不会获得物品。
本部分文档说明了删除项目所允许的时间 - http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html
由于您没有显示发送Laravel工作人员的电子邮件代码,我只能猜测您没有立即删除SQS项目 - 而是可能只在发送电子邮件后删除它。如果电子邮件发送部分超过SQS可见性超时(在链接文档中描述),那么其他工作人员可以选择同样的任务。