В моем файле .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;
}
}
Код: Выделить всё
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;
}
}
Код: Выделить всё
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
Код: Выделить всё
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
Подробнее здесь: https://stackoverflow.com/questions/694 ... -be-unique
Мобильная версия