* * This source file is subject to the MIT license that is bundled * with this source code in the file LICENSE. */ declare(strict_types=1); namespace App\Service; use App\Context\UserContext; use App\Job\ColumnConfigJob; use App\Job\OpLogsJob; use App\Job\RequestWriteLogsJob; use Hyperf\Amqp\Producer; use Hyperf\AsyncQueue\Driver\DriverFactory; use Hyperf\AsyncQueue\Driver\DriverInterface; use Hyperf\Di\Annotation\Inject; class QueueService { // 存储配置参数 protected array $params = []; // 当前操作的函数名 protected string $function = ''; // 队列驱动实例 protected DriverInterface $driver; // 生产者实例,用于发送消息 #[Inject] protected Producer $producer; /** * 构造函数,初始化队列服务。 * * @param DriverFactory $driverFactory 驱动工厂,用于获取具体的队列驱动实例 */ public function __construct(DriverFactory $driverFactory) { $this->driver = $driverFactory->get('whf'); } /** * 创建队列任务并执行。 * * @param array $params * @return QueueService */ public function make(array $params): static { // 将当前用户信息添加到参数中 $params['user'] = UserContext::getCurrentUser(); $this->params = $params; return $this; } /** * 将请求日志写入文件。 * */ public function writeRequestLogs(): void { $this->driver->push(new RequestWriteLogsJob($this->params)); } /** * 列配置保存. */ public function saveColumnConfig(): void { $this->driver->push(new ColumnConfigJob($this->params)); } /** * 将操作日志推送到队列中. */ public function opLogs(): void { // 将操作日志封装为OpLogsJob任务,并推送到驱动器对应的队列中 $this->driver->push(new OpLogsJob($this->params)); } }