2016-05-31 77 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