web-dev-qa-db-ja.com

キューを使用して高、低、中の優先度の電子メールを設定するにはどうすればよいですか?

私は勉強中ですここからの仕事派遣

問題

各接続にはキュー名を伝えるキューパラメータがあることを読みました。質問:優先度を低く、中程度、または高い優先度で送信するように設定するにはどうすればよいですか

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);
19
Pankaj

ConnectionsとVs. QueuesLaravelのキューのドキュメント の注記。これは、私が知る限り、SQS以外のすべてのキュードライバーに適用されます。

Laravelキューを開始する前に、「接続」と「キュー」の違いを理解することが重要です。config/ queue.php設定ファイルには、接続設定オプションがあります。これはオプションは、Amazon SQS、Beanstalk、Redisなどのバックエンドサービスへの特定の接続を定義します。ただし、特定のキュー接続には複数の「キュー」があり、異なるスタックまたはキューされたジョブの山と見なされる場合があります。

キュー構成ファイルの各接続構成例には、キュー属性が含まれていることに注意してください。これは、ジョブが特定の接続に送信されたときにジョブがディスパッチされるデフォルトのキューです。つまり、どのキューにディスパッチするかを明示的に定義せずにジョブをディスパッチすると、ジョブは接続構成のキュー属性で定義されたキューに配置されます。

実際には、1つのキュー接続をconfig/queues.phpファイルに登録し、defaultパラメータは、別のキューが提供されていない場合、デフォルトでジョブがディスパッチされるキューになります。

上記のVitalyの答えは、問題への正しいアプローチ(デフォルトのキューを持つ単一の接続に統合)であり、必要に応じてジョブを調整して別のキューに送信されるようにします。これは、キュー構成がどのように機能するかについての重要な(私は思う)コンテキストです。

9
Dwight
'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
4
Vitaliy Ryaboy

これを試して

'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

4
Heartbeat

_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_

これにより、「低」のジョブに移る前に「高」キューのすべてのジョブを処理するワーカーが開始されます。

4
avip

キューの優先度はここで説明されています 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_。

0
meow2x