簡體   English   中英

Symfony Messenger 不同應用服務器的不同消費者

[英]Symfony Messenger different consumers for different app servers

我有一個 Symfony 應用程序,它在負載均衡器后面的多台服務器上運行。 所以我有單獨的主機 www1、www2、www3 等。

目前我正在運行messenger:consume只在 www1 上運行,擔心競爭條件和可能的消息被處理兩次。

現在我有一個場景,我需要在每個主機上執行一個命令。

我正在考慮為每個主機使用單獨的傳輸並在每個主機上運行messenger:consume ,只消耗來自其各自隊列的消息。 但是我希望配置是動態的,即我不想在添加或刪除新主機時使用不同的傳輸配置進行另一個代碼發布。

你能提出一個實現這一目標的策略嗎?

如果你想使用不同的隊列和不同的消費者......只需為每個 www 使用不同的 DSN,存儲在環境變量(不是代碼)中。 然后您可以為每個服務器使用不同的隊列或傳輸。

傳輸配置可以在 DSN 上包含所需的隊列名稱,最佳實踐是將其存儲在環境變量中,而不是作為代碼存儲,因此您不需要“在添加新主機時使用不同傳輸配置的另一個代碼版本或刪除” 只需在部署主機時添加適當的配置,就像您對其余配置所做的一樣。

但是,如果所有主機實際上都在運行相同的應用程序,通常,您將使用單個使用者,並且所有實例都應發布到同一個隊列。

消費者甚至不需要在與任何 Web 實例相同的服務器上運行,只需將其配置為從適當的傳輸/隊列進行消費。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM