tp5.1queue 队列配置流程

extra文件夹下会有一个queue.php的配置文件,里面去改redis的配置就行(自动载入的)
1、调用一个队列
class PushApp
{
/**
* 一个使用了队列的 action
*/
public function actionWithHelloJob(){

    // 1.当前任务将由哪个类来负责处理。
    //   当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
    $jobHandlerClassName  = 'app\common\queue\TaskApp';

    // 2.当前任务归属的队列名称,如果为新队列,会自动创建
    $jobQueueName  	  = "helloJobQueue";

    // 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串
    //   ( jobData 为对象时,存储其public属性的键值对 )
    $jobData       	  = [ 'ts' => time(), 'bizId' => uniqid() , 'a' => 1 ] ;

    // 4.将该任务推送到消息队列,等待对应的消费者去执行
    $isPushed = Queue::push( $jobHandlerClassName , $jobData , $jobQueueName );

    // database 驱动时,返回值为 1|false  ;   redis 驱动时,返回值为 随机字符串|false
    if( $isPushed !== false ){
        echo date('Y-m-d H:i:s') . " a new Hello Job is Pushed to the MQ"."<br>";
    }else{
        echo 'Oops, something went wrong.';
    }
}

}

2、写个队列业务

amespace app\common\queue;

use think\Db;
use think\Log;
use think\queue\Job;

class TaskApp {

/**
 * fire方法是消息队列默认调用的方法
 * @param Job            $job      当前的任务对象
 * @param array|mixed    $data     发布任务时自定义的数据
 */
public function fire(Job $job,$data)
{
    print("<info>star"."</info>\n");
    Log::write('test','log');
    // 有些消息在到达消费者时,可能已经不再需要执行了
    $isJobStillNeedToBeDone = $this->checkDatabaseToSeeIfJobNeedToBeDone($data);
    if(!$isJobStillNeedToBeDone){
        $job->delete();
        return;
    }

    $isJobDone = $this->doHelloJob($data);

    if ($isJobDone) {
        // 如果任务执行成功, 记得删除任务
        $job->delete();
        print("<info>Hello Job has been done and deleted"."</info>\n");
    }else{
        if ($job->attempts() > 3) {
            //通过这个方法可以检查这个任务已经重试了几次了
            print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");

            $job->delete();

            // 也可以重新发布这个任务
            //print("<info>Hello Job will be availabe again after 2s."."</info>\n");
            //$job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
        }
    }
}

public function failed($data){
    print("<warn>最大报错"."</warn>\n");
}

/**
 * 有些消息在到达消费者时,可能已经不再需要执行了
 * @param array|mixed    $data     发布任务时自定义的数据
 * @return boolean                 任务执行的结果
 */
private function checkDatabaseToSeeIfJobNeedToBeDone($data){
    return true;
}

/**
 * 根据消息中的数据进行实际的业务处理...
 */
private function doHelloJob($data)
{
	
    Db::name('sms_log')->insert(['scene_identify'=>'00180004','content'=>'ceshi','receive_mobile'=>'13486583065']);
    return true;
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值