2017-12-12 11 views
0

私のlaravelアプリケーションで、プロバイダに接続するためのサードパーティライブラリを使用してサービスを設定しようとしています。私の目標は、laravelキューワーカーを経由してメッセージを送信中に接続された接続を維持するためにlaravelキューワーカーでの永続的接続

$connection = new CustomConnection(); 
$connection->refresh(); 
$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->refresh(); 
$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->close(); 

で次のように

そのコードが入ります。ジョブが、それは、コードの

$connection->sendMessage('[email protected]', ['message'=>'something', 'ttl'=>3600]); 
$connection->refresh(); 

ブロックを実行する必要があり、キューに追加されるたびにQUEの労働者が

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

を確立した場合のような

何かが$connection->refresh() 5秒ごと&を実行します。

私は、laravelのコアキューがバックエンドでどのように機能しているのか、そしてその機能と方法をオーバーライドすることができないのかどうか分かりません。

ありがとうございました。

答えて

0

サービスプロバイダで、接続(または接続を使用するサービス)をシングルトンとして登録します。これをジョブの依存関係として宣言すると、すべてのジョブはキューワーカーの存続期間中に同じ接続/サービスインスタンスを持ちます。

$ connection-> refresh()を5秒ごとに実行する方法はありません。このコールの目的がハートビート/ヘルスチェックのようなものである場合は、queue-related eventsを聞いて、代わりにこれらを使用してください。 JobProcessing、JobProcessed、JobFailed、Loopingの組み合わせにより、ジョブの実行前後にコードを実行することができます。あなたは$ connection-> refresh()を呼び出す必要があるかどうかを評価するためにこれらを使用することができます。最後の呼び出しから少なくとも5秒が経過した場合などです。

ジョブがディスパッチされたときにコードを実行するためのイベントはありません。

キューシステムの内部動作を無効にしないでください。異なるLaravelリリース間で下位互換性があるという約束はなく、上流に導入されたすべての(可能な)微妙な変更を把握しておく必要があります。

関連する問題