ThinkPHP 6 提供了一些消息队列的使用方式,让我们能够进行异步处理任务。目前 ThinkPHP 6 支持两种消息队列:Redis 和 RabbitMQ。
使用 Redis 作为消息队列:
-
首先需要安装 Redis 扩展,可以使用 Composer 进行安装:
composer require predis/predis
-
在配置文件
config/queue.php
中进行配置,例如:'type' => 'redis', 'redis' => [ 'host' => '127.0.0.1', 'port' => 6379, 'password' => '', 'select' => 0, 'timeout' => 0, 'persistent' => false, 'db' => 0, ], 'default' => 'default', 'jobs' => [ 'default' => [ 'queue' => 'default', 'tries' => 1, ] ]
-
编写异步任务,例如:
namespace app\job; class SendEmail { public function fire($job, $data) { // 执行发送邮件的操作 $job->delete(); } }
-
在需要异步处理的地方,加入任务:
use think\queue\Queue; $jobHandlerClassName = 'app\job\SendEmail'; // 执行异步任务的任务类 $jobData = [...]; // 任务数据 $jobQueueName = 'default'; // 任务队列名称 Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
使用 RabbitMQ 作为消息队列:
-
首先需要安装 php-amqplib 库,可以使用 Composer 进行安装:
composer require php-amqplib/php-amqplib
-
在配置文件
config/queue.php
中进行配置,例如:'type' => 'amqp', 'amqp' => [ 'host' => '127.0.0.1', 'port' => 5672, 'user' => 'guest', 'password' => 'guest', 'vhost' => '/', 'queue' => 'default', 'exchange' => 'default', 'routing_key' => 'default', 'persistent' => true, 'lazy' => true, 'ssl_params' => [], // 可选 'connect_options' => [], // 可选 ], 'default' => 'default', 'jobs' => [ 'default' => [ 'queue' => 'default', 'tries' => 1, ] ]
-
编写异步任务,例如:
namespace app\job; class SendEmail { public function fire($job, $data) { // 执行发送邮件的操作 $job->delete(); } }
-
在需要异步处理的地方,加入任务:
use think\queue\Queue; $jobHandlerClassName = 'app\job\SendEmail'; // 执行异步任务的任务类 $jobData = [...]; // 任务数据 $jobQueueName = 'default'; // 任务队列名称 Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
以上是使用 ThinkPHP 6 进行消息队列的使用方式,希望对您有所帮助。