簡體   English   中英

Laravel 隊列工作器中的持久連接

[英]Persistent connection in laravel queue worker

我正在嘗試使用第三方庫在我的 laravel 應用程序上設置服務以連接到提供者。

它的代碼如下

$connection = new CustomConnection();
$connection->refresh();
$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();
$connection->sendMessage('user2@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->close();

我的目標是在通過 laravel 隊列工作器發送消息時保持連接連接。

就像如果que worker建立一樣

$connection = new CustomConnection();
$connection->refresh();

每 5 秒執行一次$connection->refresh()每當在隊列中添加作業時它都應該執行

$connection->sendMessage('user@myapp.com', ['message'=>'something', 'ttl'=>3600]);
$connection->refresh();

代碼塊。

我不知道 laravel 的核心隊列是如何在后端工作的,以及我是否可以覆蓋它的功能以及如何覆蓋。

謝謝。

在您的服務提供商中,將連接(或使用該連接的服務)注冊為單例 將此聲明為您的作業的依賴項,並且在隊列工作者的整個生命周期中,所有作業都將具有相同的連接/服務實例。

您無法每五秒鍾執行一次$ connection-> refresh()。 如果此調用的目的是某種心跳/健康檢查,請偵聽與隊列相關的事件,並改用這些事件 JobProcessing,JobProcessed,JobFailed和Looping的組合將使您能夠在作業執行之前和之后執行代碼。 您可以使用它們來評估是否應調用$ connection-> refresh(),例如自上次調用以來已過去至少五秒鍾。

調度作業時,沒有事件可用於運行代碼。

不要嘗試覆蓋隊列系統的內部工作原理。 在不同的Laravel版本之間沒有向后兼容性的保證,並且您必須跟蹤上游引入的所有(可能的)細微更改。

允許在隊列作業之間持久化數據庫會話* 此拉取請求允許在隊列作業之間持久化數據庫會話。 要選擇加入此行為,用戶只需將 VAPOR_QUEUE_DATABASE_SESSION_PERSIST 環境變量設置為 true。 允許進行一個非常簡單的工作,至少使用一次數據庫,在 512MB 的 lambda 函數中速度提高 45%。 https://github.com/laravel/vapor-core/pull/97

暫無
暫無

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

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