7月 28, 2022 -
laravel
Laravel队列的多台服务器分发已关闭评论
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:结果:
每台服务器都是均衡接收任务,处理任务,接收任务