在ThinkPHP中集成消息队列系统(如RabbitMQ)可以通过使用官方提供的扩展库topthink/think-queue
实现。具体步骤如下:
composer require topthink/think-queue
在config/queue.php
中添加以下内容:
return [
// 默认队列驱动
'default' => 'rabbitmq',
'connections' => [
'rabbitmq' => [
'driver' => 'rabbitmq',
'host' => 'your-rabbitmq-host',
'port' => 5672,
'vhost' => '/',
'login' => 'your-rabbitmq-username',
'password' => 'your-rabbitmq-password',
'queue' => 'default',
'exchange_declare' => true,
'queue_declare_bind' => true,
'exchange' => 'amq.direct',
'delivery_mode' => 2,
],
],
];
其中,rabbitmq
为连接名,driver
为驱动类型,host
和port
为RabbitMQ的主机和端口,vhost
为虚拟主机,login
和password
为登录RabbitMQ的用户名和密码,queue
为队列名称,exchange_declare
、queue_declare_bind
和exchange
为声明交换机和队列的选项,delivery_mode
为消息持久化选项。
在app\job
目录下创建任务类,例如:
namespace app\job;
class Test
{
public function fire($job, $data)
{
// 处理任务
$job->delete();
}
}
其中,fire
方法为任务执行的入口,$job
为任务实例,$data
为任务数据。
在控制器或其它业务逻辑中推送任务,例如:
use think\queue\Queue;
class Index
{
public function index()
{
$jobHandlerClassName = 'app\job\Test'; // 任务类名
$jobQueueName = "default"; // 队列名称
$jobData = []; // 任务数据
Queue::push($jobHandlerClassName, $jobData, $jobQueueName);
}
}
其中,$jobHandlerClassName
为任务类名,$jobQueueName
为队列名称,$jobData
为任务数据。
在命令行中执行以下命令启动消费进程:
php think queue:work --queue rabbitmq --daemon
其中,--queue
指定队列名称,--daemon
表示以守护进程方式运行。
以上就是在ThinkPHP中集成消息队列系统(如RabbitMQ)的步骤和关键词。