Help us understand the problem. What is going on with this article?

Laravel5.3 × Redisで複数のキューを扱いたかったときのメモ

More than 1 year has passed since last update.

実装したクラスをキューのジョブとして宣言するには

Illuminate\Contracts\Queue\ShouldQueueをimplementsしている必要がある。
なぜならhandlerShouldBeQueuedでimplementsしているかのチェックをしているからである。
基本的には下記コマンドでクラスを作成するので自前でimplementsして実装する以外は特に気にする必要はない。

php artisan make:job hoge --queued

キューのpush箇所

Illuminate\Events\Dispatcher::createQueuedHandlerCallable

キー名について

Illuminate\Queue\RedisQueue::getQueueで返却されるキーが
実際にキューで使用するキー名になる 。
デフォルトはqueues:default
設定を変えるには今のところ3パターンわかってます。
まだあったら追記予定

方法1

app\config\queue.phpのqueueをdefaultから任意のキーに変更する。
下記の設定だとqueues:hoge:fooのキー名になる。

 'redis' => [
              'driver'     => 'redis',
              'connection' => 'default',
              'queue'      => 'hoge:foo',
              'expire'     => 60,
            ],

方法2

Job側のコンストラクタでonQueueメソッドを実行し、設定を上書く。
ポイントはhandle()が呼び出される前に記述すること 。
下記の設定だとqueues:hogehogeのキー名になる。

<?php
namespace App\Jobs;
use App\Jobs\Job;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Bus\SelfHandling;
use Illuminate\Contracts\Queue\ShouldQueue;
class MyJob extends Job implements SelfHandling, ShouldQueue
{
    use InteractsWithQueue, SerializesModels;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->onQueue('hogehoge');
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {

    } 
}

方法3

方法2に似ているがonQueueメソッド実行タイミングがちょっと違う。
ジョブ呼び出し側でJobインタンス生成時にonQueueメソッドを実行し、設定を上書く。
これだとジョブ呼び出し側で同じジョブでも違うキューに設定することが可能。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away