Skip to content

队列

在多租户系统中,队列默认驱动使用database, 具体配置如下:

php
// config/tenancy.php
[
 /**
     * Queue 租户配置
     */
    'queue' => [
        // Queue 队列
        'connections' => [
            // 主域
            'central' => [
                'driver' => 'database',
                'connection' => env('DB_CONNECTION', 'mysql'),
                'table' => 'jobs',
                'queue' => 'default',
                'retry_after' => 90,
                'central' => true, // 主域一定要配置这个
            ],

            // 租户
            'tenant' => [
                'driver' => 'database',
                'table' => 'jobs',
                'connection' => env('DB_CONNECTION', 'mysql'),
                'queue' => 'tenant',
                'retry_after' => 90,
            ],
        ],
    ]
]

然后使用下面的命令创建租户的队列任务

php
php artisan catch:tenant:job TenancyTest

这个命令会在 \app\Jobs 目录创建一个名为 TenancyTest.php 得任务文件,内容如下:

php
namespace App\Jobs;

use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;

class TenancyTest implements ShouldQueue
{
    use Queueable;

    /**
     * Create a new job instance.
     */
    public function __construct()
    {
        $this->onConnection('tenant');
    }

    /**
     * Execute the job.
     */
    public function handle(): void
    {
        //
    }
}

具体业务可以在 handle, 租户包会通过任务上下文来识别租户。这个无需关心。