mlntn / laravel-unique-queue
Laravel 队列连接,防止相同工作被多次排队
1.3.0
2020-10-13 17:56 UTC
Requires
- php: ~7.1
- illuminate/queue: ~5.7||~6||~7||~8
- illuminate/redis: ~5.7||~6||~7||~8
This package is auto-updated.
Last update: 2024-09-11 05:13:58 UTC
README
⚠️ 已弃用
laravel/framework 中已实现唯一工作。请使用 Laravel 8.14.0 或更高版本中的官方实现。此存储库将不再更新,并将被存档。
Laravel Unique Queue
这个 Redis 队列驱动程序与标准的 Laravel Redis 队列驱动程序一样工作,但它防止相同的工作被多次排队。
要求
需要安装 PHP >= 7.1。
需要 illuminate/redis
和 illuminate/queue
,版本为 "~5.7"
、"~6"
或 "~7"
。
安装
通过 Composer 需要
composer require mlntn/laravel-unique-queue
配置
在 config/queue.php
中创建一个新的连接
return [
// ...
'connections' => [
'my_unique_queue_connection_name' => [
'driver' => 'unique',
'connection' => 'default',
'queue' => env('UNIQUE_QUEUE_NAME', 'my_unique_queue_name'),
'retry_after' => 90,
],
//...
]
];
实现
实现唯一队列工作
您的作业应使用 UniquelyQueueable 特性并具有 getUniqueIdentifier 方法
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mlntn\Queue\Traits\UniquelyQueueable;
class MyUniqueJob implements ShouldQueue {
use Dispatchable, InteractsWithQueue, Queueable, UniquelyQueueable, SerializesModels;
/* ... */
public function getUniqueIdentifier()
{
return 'some-unique-identifier';
}
}
如果连接不是默认连接,则在调度作业时需要指定连接
dispatch(new UniqueJob)->onConnection('my_unique_queue_connection_name');
实现唯一队列监听器
与作业类似,监听器类应使用 UniquelyQueueable 特性,并确保您已设置连接和队列
<?php
namespace App\Listeners;
use Illuminate\Contracts\Queue\ShouldQueue;
use Mlntn\Queue\Traits\UniquelyQueueable;
class MyListener implements ShouldQueue {
public $connection = 'my_unique_queue_connection_name';
public $queue = 'my_unique_queue_name';
public function handle($event)
{
//
}
public function getUniqueIdentifier()
{
return 'some-unique-identifier';
}
}
使用 Lumen
Lumen 处理绑定略有不同。使用 LumenQueueServiceProvider 在 Lumen 中启用唯一排队。
在 app.php
中注册服务提供者
$app->register(Mlntn\Providers\LumenQueueServiceProvider::class);
使用 Horizon
设置工作配置
'worker_name' => [
'connection' => 'my_unique_queue_connection_name',
'queue' => ['default'],
'balance' => 'auto',
'processes' => 16,
'tries' => 3,
],
运行队列工作
唯一队列行为内部处理。使用 artisan(通过 cli、supervisor 或其他方法)运行队列工作。有关更详细的信息,请访问 https://github.com/illuminate/queue。指定在 config/queue.php
中使用的连接名称。
php artisan queue:work my_unique_queue_connection_name