rel*_*89n 6 php queue redis laravel
我预计标有ShouldBeUnique
接口的作业不会被多次调度。然而,所有工作都像平常一样调度。
在我的 .env 文件中,redis 设置为用于队列连接以及缓存驱动程序:
QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
Run Code Online (Sandbox Code Playgroud)
我有两个正在运行的队列工作人员,它们竞争队列中的作业。
要推送作业,有控制台命令:
QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
Run Code Online (Sandbox Code Playgroud)
作业类如下所示(注意uniqueId
是相同的):
class TestUnique extends Command
{
protected $signature = 'test:unique';
protected $description = 'Command description';
private Dispatcher $dispatcher;
public function __construct(Dispatcher $dispatcher)
{
parent::__construct();
$this->dispatcher = $dispatcher;
}
public function handle()
{
$this->dispatcher->dispatch(new SomeJob(1));
$this->dispatcher->dispatch(new SomeJob(2));
$this->dispatcher->dispatch(new SomeJob(3));
$this->dispatcher->dispatch(new SomeJob(4));
$this->dispatcher->dispatch(new SomeJob(5));
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
一旦我们运行控制台命令来调度作业,所有这些作业都会像通常没有ShouldBeUnique
. 日志:
queue_worker_2 | [2021-10-04 08:07:44][p0j7QmQt7JNFEWUoxdaEOuheJiPFTYrh] Processing: App\Console\Commands\SomeJob
queue_worker_2 | string(14) "start handle 1"
queue_worker_1 | [2021-10-04 08:07:44][DxFLi5V1UC7HfzpDFMmwv6po3Mh7Weap] Processing: App\Console\Commands\SomeJob
queue_worker_1 | string(14) "start handle 2"
queue_worker_2 | string(15) "finish handle 1"
queue_worker_2 | [2021-10-04 08:07:49][p0j7QmQt7JNFEWUoxdaEOuheJiPFTYrh] Processed: App\Console\Commands\SomeJob
queue_worker_1 | string(15) "finish handle 2"
queue_worker_1 | [2021-10-04 08:07:49][DxFLi5V1UC7HfzpDFMmwv6po3Mh7Weap] Processed: App\Console\Commands\SomeJob
queue_worker_1 | [2021-10-04 08:07:49][6sZoEH3WMsCMxYAmupy5RezlQezaAYag] Processing: App\Console\Commands\SomeJob
queue_worker_1 | string(14) "start handle 3"
queue_worker_2 | [2021-10-04 08:07:49][jQQNCm6MrsyxkxSClDsBNIfQezQIfBV1] Processing: App\Console\Commands\SomeJob
queue_worker_2 | string(14) "start handle 4"
queue_worker_1 | string(15) "finish handle 3"
queue_worker_1 | [2021-10-04 08:07:54][6sZoEH3WMsCMxYAmupy5RezlQezaAYag] Processed: App\Console\Commands\SomeJob
queue_worker_2 | string(15) "finish handle 4"
queue_worker_2 | [2021-10-04 08:07:54][jQQNCm6MrsyxkxSClDsBNIfQezQIfBV1] Processed: App\Console\Commands\SomeJob
queue_worker_1 | [2021-10-04 08:07:54][iGt3kbZTqj6lrXgm0SFFcaqVjbQ5tUqs] Processing: App\Console\Commands\SomeJob
queue_worker_1 | string(14) "start handle 5"
queue_worker_1 | string(15) "finish handle 5"
queue_worker_1 | [2021-10-04 08:07:59][iGt3kbZTqj6lrXgm0SFFcaqVjbQ5tUqs] Processed: App\Console\Commands\SomeJob
Run Code Online (Sandbox Code Playgroud)
这与缓存代码无关,因为服务定义使用queue:listen
:
final class SomeJob implements ShouldQueue, ShouldBeUnique
{
public function __construct(private int $id) { }
public function handle(): void
{
var_dump("start handle $this->id");
sleep(5);
var_dump("finish handle $this->id");
}
public $uniqueFor = 3600;
public function uniqueId()
{
return 1;
}
}
Run Code Online (Sandbox Code Playgroud)
谁能说出它的ShouldBeUnique
用途以及当前代码有什么问题吗?
归档时间: |
|
查看次数: |
2314 次 |
最近记录: |