PHP使用topthink/think-queue消息队列实例

in 编程
关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9

前提:thinkphp5框架基础上,已包含topthink/think-queue消息队列依赖包。

1、创建job数据表(字段不要更改)

CREATE TABLE `tp_jobs` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `queue` varchar(255) NOT NULL,
  `payload` longtext NOT NULL,
  `attempts` tinyint(3) unsigned NOT NULL,
  `reserved` tinyint(3) unsigned NOT NULL,
  `reserved_at` int(10) unsigned DEFAULT NULL,
  `available_at` int(10) unsigned NOT NULL,
  `created_at` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

2、配置(配置文件位于 application/extra/queue.php)

return [
    'connector' => 'database'  //驱动类型,可选择 sync(默认):同步执行,database:数据库驱动,redis:Redis驱动,topthink:Topthink驱动
];

3、创建任务类,这里为了区分模块单独创建了一个模块和类。

class QueueClient
{
    /**
     * 邮件提醒
     * @param array $data  内容
     * @return 
     */
    public function sendMAIL(Job $job, $data) 
    {
        $isJobDone = $this->send($data);       
        if ($isJobDone) {
            //成功删除任务
            $job->delete();
        } else {
            //任务轮询4次后删除
            if ($job->attempts() > 3) {              
                // 第1种处理方式:重新发布任务,该任务延迟10秒后再执行
                //$job->release(10); 
                // 第2种处理方式:原任务的基础上1分钟执行一次并增加尝试次数
                //$job->failed();   
                // 第3种处理方式:删除任务
                $job->delete();  
            }
        }
    }

    /**
     * 根据消息中的数据进行实际的业务处理
     * @param array|mixed    $data     发布任务时自定义的数据
     * @return boolean                 任务执行的结果
     */
    private function send($data) 
    {
        $sendemail = new Sendmail();
        $result    = $sendemail->sendMail($data); 
        if ($result) {
            return true;
        } else {
            return false;
        }            
    }
}

4、增加任务

//加入任务队列中
 \think\Queue::push('app\common\queue\QueueClient@sendMAIL', $email_data, $queue = null);

5、在控制台监听任务并执行

C:\wamp\www\test>php think queue:listen

Buy me a cup of coffee :)

关注公众号【好便宜】( ID:haopianyi222 ),领红包啦~
阿里云,国内最大的云服务商,注册就送数千元优惠券:https://t.cn/AiQe5A0g
腾讯云,良心云,价格优惠: https://t.cn/AieHwwKl
搬瓦工,CN2 GIA 优质线路,搭梯子、海外建站推荐: https://t.cn/AieHwfX9
扫一扫关注公众号添加购物返利助手,领红包
Comments are closed.

推荐使用阿里云服务器

超多优惠券

服务器最低一折,一年不到100!

朕已阅去看看