長時間讀取器,但第一次張貼海報。從工作守護進程運行的隊列命令中更改laravel緩存前綴不起作用
我一直在抨擊我的頭上一個顯然很簡單的問題,但目前似乎沒有解決方案。這裏什麼都不做......
我們運行一個Laravel 5.1 API,它在某些情況下將使用各種軟件包和設置的服務器實例排隊。每個實例都有一個特定的ID,它包含在隊列項目數據中。該實例ID又被用作Redis緩存鍵的前綴。例如:「instance-0:clients:list」用於在實例ID爲0上運行的客戶端列表。「cache.prefix」配置設置通過具有當前實例ID的中間件進行更新。
各種創建/更新/刪除端點「忘記」緩存鍵,然後在調用列表/顯示端點時重新生成緩存鍵。當這些操作直接通過API端點發生時,一切都很好,並且很好。如果我用「artisan queue:work」手動運行隊列,它也可以工作。
但是...
常規隊列運行通過supervisord一個守護進程。當隊列作爲守護進程運行時,緩存前綴永遠不會改變,因爲(我猜測)它在運行給定隊列項時不會通過中間件。如果我手動將隊列作爲守護程序運行(而不是通過supervisord),也會發生這種情況。我試過通過\ Config :: set('cache.prefix','instance -X')以及putenv('CACHE_PREFIX = instance-X')強制設置值,但它們沒有效果在緩存存儲本身使用的實際前綴上。我能夠成功設置它的唯一方法是在「.env」文件中設置CACHE_PREFIX,但它不適用於out體系結構。我們在Docker容器中運行API和工作者實例,並且工作者並不特定於任何給定的API實例,因此將實例ID包含在隊列項目數據中供以後使用。
所以,我有種股票,我可以如何設置每個隊列項目的緩存前綴。這甚至有可能嗎?任何幫助將不勝感激!
問候,
克里斯托弗