7月 28, 2022 - laravel    Laravel队列的多台服务器分发已关闭评论

Laravel队列的多台服务器分发

laravel一个job配置到不同服务器上的执行,实现更高效率的执行

场景:一个job需要在不同服务上同时执行,加快job的执行

1:测试代码:

public function test()
{
    //TestLocalBigFileUploadToOss::dispatch()->onQueue('aspera');
    for ($i = 1; $i <= 100; ++$i) {
        TestMultiTod::dispatch($i)->onQueue('testTod');
    }

    return json_encode(['code' => 0]);
}

2:Job的代码:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;

class TestMultiTod implements ShouldQueue
{
    use Dispatchable;
    use InteractsWithQueue;
    use Queueable;
    use SerializesModels;

    private $tag = '[test Multi-channel distribution - %s]: ';
    private $number;

    private function getTag()
    {
        return sprintf($this->tag, debug_backtrace()[1]['function']);
    }

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct($number)
    {
        $this->number = $number;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        try {
            //模拟执行过程
            sleep(5);
            Log::info('the number='.$this->number);

            return;
        } catch (\Exception $e) {
            Log::error($this->getTag().$e->getMessage());

            return;
        }
    }
}

 

3:worker配置:在每台服务器上的supervisor都增加一个conf来执行testTod的job,worker工人数量为2. 表示可以同时执行2个job任务

 

4:结果:

每台服务器都是均衡接收任务,处理任务,接收任务

评论被关闭。