私は勉強中ですここからの仕事派遣
問題
各接続にはキュー名を伝えるキューパラメータがあることを読みました。質問:優先度を低く、中程度、または高い優先度で送信するように設定するにはどうすればよいですか
Cmdプロンプト
私はコマンドを使用しています:php artisan queue:listenジョブを処理します。
私が試したものは?
php artisan queue:work --queue=high,default
ただし、接続のキューパラメータの値が高くない場合、このコードは機能しません
デフォルトキュードライバー
'default' => env('QUEUE_DRIVER', 'database'),
キュー接続
'connections' => [
'Register' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
'ForgotPassword' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
],
。env
QUEUE_DRIVER=Register
登録メールのコントローラコード
$job = (new SendActivationEmail($Data))
->onConnection('Register');
dispatch($job);
パスワードをリセットするためのコントローラコード
$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('ForgotPassword');
dispatch($job);
ConnectionsとVs. QueuesLaravelのキューのドキュメント の注記。これは、私が知る限り、SQS以外のすべてのキュードライバーに適用されます。
Laravelキューを開始する前に、「接続」と「キュー」の違いを理解することが重要です。config/ queue.php設定ファイルには、接続設定オプションがあります。これはオプションは、Amazon SQS、Beanstalk、Redisなどのバックエンドサービスへの特定の接続を定義します。ただし、特定のキュー接続には複数の「キュー」があり、異なるスタックまたはキューされたジョブの山と見なされる場合があります。
キュー構成ファイルの各接続構成例には、キュー属性が含まれていることに注意してください。これは、ジョブが特定の接続に送信されたときにジョブがディスパッチされるデフォルトのキューです。つまり、どのキューにディスパッチするかを明示的に定義せずにジョブをディスパッチすると、ジョブは接続構成のキュー属性で定義されたキューに配置されます。
実際には、1つのキュー接続をconfig/queues.php
ファイルに登録し、default
パラメータは、別のキューが提供されていない場合、デフォルトでジョブがディスパッチされるキューになります。
上記のVitalyの答えは、問題への正しいアプローチ(デフォルトのキューを持つ単一の接続に統合)であり、必要に応じてジョブを調整して別のキューに送信されるようにします。これは、キュー構成がどのように機能するかについての重要な(私は思う)コンテキストです。
'connections' => [
'Register' => [ //<this name is connection name
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low', //<this name is default queue name then you register a queue using this connection
'retry_after' => 5,
],
],
次の方法でコードを変更することをお勧めします。
'connections' => [
'Register' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'default',
'retry_after' => 5,
],
],
優先度の高いジョブ-登録メールのコントローラーコード
$job = (new SendActivationEmail($Data))
->onConnection('Register')
->onQueue("high");
dispatch($job);
中優先度のジョブ-パスワードリセットのコントローラーコード
$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('Register')
->onQueue("medium");
dispatch($job);
優先度の低いジョブ
dispatch((new LowPriorityJob())->onQueue("low"));
デフォルトの優先ジョブ
dispatch((new DefaultPriorityJob()));
-> onConnection( 'Register')//デフォルトの接続がRegister in .env QUEUE_DRIVER = Registerであると指定した場合、この行は役立ちます
ジョブを実行する
このコマンドは、デフォルトの接続に保存されているジョブを実行します。あなたの場合は登録
php artisan queue:work --queue=high,medium,low,default
このコマンドは、customConnectionName接続に保存されているジョブを実行します
php artisan queue:work customConnectionName --queue=high,medium,low,default
これを試して
'connections' => [
'Register-low' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
'Register-high' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'high',
'retry_after' => 5,
],
'ForgotPassword' => [
'driver' => 'database',
'table' => 'tbljobs',
'queue' => 'low',
'retry_after' => 5,
],
],
その後
php artisan queue:listen --queue = Register-high、Register-low
_config/queue.php
_ファイルで2つのキューを定義する必要があります。たとえば、1つが「高」、もう1つが「低」という名前を付けます。
次に、必要に応じて次のようにジョブをディスパッチできます。
_$job = (new SendResetPasswordEmail($this->tokens->create($user), $user))
->onConnection('ForgotPassword');
dispatch($job)->onQueue('high'));
_
注:->onQueue('high')
最後に、次を実行します:_php artisan queue:work --queue=high,low
_
これにより、「低」のジョブに移る前に「高」キューのすべてのジョブを処理するワーカーが開始されます。
キューの優先度はここで説明されています https://laravel.com/docs/5.7/queues#queue-priorities 。 「コンマで区切られたキュー名のリストを作業コマンドに渡す」だけです。
ドキュメントが言うように:
_php artisan queue:work --queue=high,low
_
したがって、dispatch((new Job)->onQueue('high'))
はdispatch((new Job)->onQueue('low'))
よりも優先されます。
または、カスタムキュー名を使用することもできます。
_php artisan queue:work --queue=first,second
_。