Laravel MustBeUnique не делает рабочие места уникальнымиPhp

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Laravel MustBeUnique не делает рабочие места уникальными

Сообщение Anonymous »

Я ожидал, что задание, отмеченное интерфейсом MustBeUnique, не будет отправлено более одного раза. Однако все задания отправляются, как обычно.
В моем файле .env Redis настроен на использование для подключения к очереди, а также для драйвера кэша:

Код: Выделить всё

QUEUE_CONNECTION=redis
CACHE_DRIVER=redis
У меня работают два работника очереди, которые конкурируют за задания из очереди.
Чтобы отправить задания, есть консольная команда:

Код: Выделить всё

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;
}
}
Класс задания выглядит следующим образом (обратите внимание, что uniqueId тот же):

Код: Выделить всё

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;
}
}
Как только мы запускаем консольную команду для отправки заданий, все они отправляются, как обычно, без метода MustBeUnique. Журналы:

Код: Выделить всё

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
Дело не в кэшированном коде, поскольку определение сервиса использует очередь:listen:

Код: Выделить всё

queue_worker:
image: ${PROJECT_NAME}_php
restart: unless-stopped
command: php artisan queue:listen
working_dir: /var/www/
volumes: *php-volumes
environment: *php-env
networks:
- main_network
depends_on:
- php

Может ли кто-нибудь сказать, для чего предназначен MustBeUnique и что не так с текущим кодом?


Подробнее здесь: https://stackoverflow.com/questions/694 ... -be-unique
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»