2017-02-28 54 views
2

我在兩臺服務器上運行laravel應用程序(使用負載平衡器),我想知道如果我將作業放在AWS SQS隊列中並且兩臺服務器都訂閱了隊列,會發生什麼。使用AWS隊列的Laravel多臺服務器

  • 工作是否有可能被處理多次?
  • 有什麼辦法來設置的東西,以便把工作隊列在同一臺服務器處理作業(想上傳文件所在的文件存儲在硬盤的第一個)。

任何經驗/提示/建議這種設置表示讚賞。

回答

2

這個工作是否有可能被處理多次?

是的,SQS只保證至少一次交貨。您應該構建應用程序以允許傳遞多個消息副本。 http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/standard-queues.html#standard-queues-at-least-once-delivery

通常情況下,解決此問題的方法是擁有可鎖定郵件唯一標識符的服務。這樣你可以限制關鍵部分。

有沒有什麼辦法可以設置這些東西,以便將作業放到隊列中的同一臺服務器處理作業(認爲文件上載的地方是文件首先存儲在磁盤中)。

正如Laurence所建議的,您可以爲每個實例分別設置隊列。

1

有什麼辦法來設置的東西,以便把工作 在隊列中的同一臺服務器處理作業(想上傳文件所在的文件是 存儲在硬盤的第一個)。

只需配置每個服務器以使用其自己的SQS隊列 - 而不是共享同一個服務器。這樣你就可以100%知道推送作業的服務器是處理它的服務器。

你可以通過你的.env配置文件在每臺服務器上做到這一點。