我正在運行隊列進程,使用Amazons SQS
和處理作業的單獨機器(工作人員)。我也用supervisor
以確保queue:listen
始終工人機器上運行,但是當我定義numprocs=8
(像laravel的網站爲例)的工作正在執行一次,因此電子郵件被髮送幾次,等」多。SQS重複消息handeling
任何想法即使我正在運行多個工作進程和計算機,我如何確保只執行一次作業?
我正在運行隊列進程,使用Amazons SQS
和處理作業的單獨機器(工作人員)。我也用supervisor
以確保queue:listen
始終工人機器上運行,但是當我定義numprocs=8
(像laravel的網站爲例)的工作正在執行一次,因此電子郵件被髮送幾次,等」多。SQS重複消息handeling
任何想法即使我正在運行多個工作進程和計算機,我如何確保只執行一次作業?
對於SQS,一旦工人拿到一件物品 - 工人有責任立即從SQS中刪除物品,以便其他工人也不會收到物品。
文檔的這一部分解釋了什麼的,你所允許的時間量,刪除的項目 - http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html
既然你沒有顯示你的電子郵件發送Laravel工人的代碼,我只能猜測,您並不是立即刪除SQS項目,而是可能僅在電子郵件發送後才刪除它。如果該電子郵件發送的部分會比SQS可見性超時(鏈接文檔中描述)以上,這將使意義相同的任務由其他工人接走。
此外,請求計數器將增加在下次工作人員提出要求。這是用於清理或重新運行某個任務的良好指示器。 – mootmoot
相關:[這個答案](http://stackoverflow.com/a/38290017/836214) – Krease