Queue任务队列
依赖:Swoole1.7.14以上版本
依赖:beanstalkd
1.Queue的使用
//队列名
$tube = 'testjob1';
//具体数据
$data = '这是第一个队列任务';
//就这么简单 队列已经被塞入内存
//$priority, $delaytime, $lifetime 可不填。默认会取配置的参数
$priority = 1;
$delaytime = 0;
$lifetime = 60;
Queue::put($tube, $data, $priority, $delaytime, $lifetime);
2.配置config/queue.php
<?php
return [
//异步消息队列的配置
//分布式
// 'server' => [
// [
// 'host' => "127.0.0.1",
// 'port' => 11300
// ],
// [
// 'host' => "127.0.0.1",
// 'port' => 11299
// ],
// ],
//单机
'server' => [
'host' => "127.0.0.1",
'port' => 11300
],
//log路径
'log_dir' => 'runtime/queue',
//tick队列任务的频率,精确到毫秒
'timer' => 100,
//类文件缓存
'class_cache' => 'runtime/queue/bootstrap.class.cache',
//处理队列任务
'queue_jobs' => [
[
'tube' => 'update_user_info',//队列的名称
'job' => 'src\Web\Queue\UpdateUser',//需要执行的任务
//处理当前队列的进程数
'task_worker_num' => 10,
],
// [
// 'tube' => 'testjob3',//队列的名称
// 'job' => 'src\Web\Queue\TestJob',//需要执行的任务
// //处理当前队列的进程数
// 'task_worker_num' => 1,
// ],
// [
// 'tube' => 'testjob2',//队列的名称
// 'job' => 'src\Web\Queue\TestJob',//需要执行的任务
// //处理当前队列的进程数
// 'task_worker_num' => 2,
// ]
],
//这里是push到队列是需要用到的参数
'priority' => 10,//该任务的重要程度,越小优先处理
//延迟秒数
'delaytime' => 0,
//一个任务最多可以执行的秒数
'lifetime' => 60,
];
3.启动队列服务
开启异步队列服务处理任务
app/queue start|restart|stop
处理任务怎么写
<?php
namespace src\Web\Queue;
use Group\Queue\QueueJob;
class TestJob extends QueueJob
{
public function handle()
{
//队列任务的id号
$jobId = $this -> jobId;
//你在插入队列时的数据
$jobData = $this -> jobData;
//后面就可以写处理的逻辑了
\Log::info('queue handle job'.$this -> jobId, ['time' => date('Y-m-d H:i:s', time())], 'queue.job');
}
}