|
|
6 месяцев назад | |
|---|---|---|
| .. | ||
| Helper.php | 6 месяцев назад | |
| JobEvent.php | 8 месяцев назад | |
| QueueJob.php | 7 месяцев назад | |
| QueueJobInterface.php | 8 месяцев назад | |
| README.md | 6 месяцев назад | |
| ShouldQueue.php | 6 месяцев назад | |
| ShouldQueueInterface.php | 6 месяцев назад | |
UCore 队列系统为项目提供了统一的队列任务和事件处理架构,包含以下核心组件:
QueueJob - 队列任务基类ShouldQueue - 队列事件监听器基类QueueJobInterface - 队列任务接口JobEvent - 队列事件处理器Helper - 队列辅助工具所有队列任务都应该继承 UCore\Queue\QueueJob 基类:
use UCore\Queue\QueueJob;
class MyJob extends QueueJob
{
protected $data;
public function __construct(array $data)
{
$this->data = $data;
parent::__construct($data);
}
public function run(): bool
{
// 实现具体的任务逻辑
return true;
}
public function payload()
{
return $this->data;
}
}
所有队列事件监听器都应该继承 UCore\Queue\ShouldQueue 基类:
use UCore\Queue\ShouldQueue;
class MyEventListener extends ShouldQueue
{
public $queue = 'events';
public $tries = 5;
public function run(object $event): bool
{
// 检查事件类型
if (!$this->shouldHandle($event)) {
$this->logInfo('事件被过滤,跳过处理', [
'event_class' => get_class($event)
]);
return true;
}
// 处理事件逻辑
$this->logInfo('处理事件', [
'event_id' => $this->getEventId($event)
]);
// 具体的业务逻辑
if ($event instanceof MyEvent) {
// 处理特定事件
$this->processMyEvent($event);
}
return true;
}
protected function shouldHandle(object $event): bool
{
// 自定义过滤逻辑
return $event instanceof MyEvent;
}
protected function handleFailure(\Throwable $exception): void
{
// 自定义失败处理
$this->logError('事件处理失败');
}
private function processMyEvent(MyEvent $event): void
{
// 具体的事件处理逻辑
}
}
迁移前:
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class OldJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle(): void
{
// 处理逻辑
}
}
迁移后:
use UCore\Queue\QueueJob;
class NewJob extends QueueJob
{
public function run(): bool
{
// 处理逻辑
return true;
}
public function payload()
{
return $this->args;
}
}
迁移前:
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
class OldListener implements ShouldQueue
{
use InteractsWithQueue;
public function handle(MyEvent $event): void
{
// 处理逻辑
}
}
迁移后:
use UCore\Queue\ShouldQueue;
class NewListener extends ShouldQueue
{
public $queue = 'events';
public function run(object $event): bool
{
// 处理逻辑
// Laravel会自动调用handle方法,然后调用这个run方法
if ($event instanceof MyEvent) {
// 处理特定事件
}
return true;
}
}
parent::__construct() 传递参数run() 方法返回 bool 表示任务是否成功logInfo() 方法记录关键信息$queue、$tries、$timeout 属性safeHandle() 方法包装事件处理逻辑shouldHandle() 方法实现事件过滤handleFailure() 方法实现自定义失败处理// 队列名称
public $queue = 'default';
// 最大重试次数
public $tries = 3;
// 任务超时时间(秒)
public $timeout = 300;
// 重试延迟时间(秒)
public $retryAfter = 60;
系统支持指数退避重试策略:
系统自动记录以下日志:
事件监听器自动提供以下标签用于监控:
listener:ClassName - 监听器类名queue:QueueName - 队列名称可以通过以下方式获取调试信息:
kku_job_runs)kku_failed_jobs)php artisan queue:monitor 命令监控队列状态