LoginSignup
1
0

More than 5 years have passed since last update.

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

Posted at

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

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メソッドを実行し、設定を上書く。
これだとジョブ呼び出し側で同じジョブでも違うキューに設定することが可能。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0