thinkphp-queue访问接口没有反应?什么情况

浏览:1738 发布日期:2020/07/06 分类:ThinkPHP6专区
在目录下使用cmd监听,一直没有变化过php think queue:work --queue helloJobQueue
配置return [
    //Redis驱动
    'connector'  => 'redis',
    "expire"     =>60,//任务过期时间默认为秒,禁用为null
    "default"    =>"default",//默认队列名称
    "host"       =>"127.0.0.1",//Redis主机IP地址
    "port"       =>6379,//Redis端口
    "password"   =>"",//Redis密码
    "select"     =>0,//Redis数据库索引
    "timeout"    =>0,//Redis连接超时时间
    "persistent" =>false,//是否长连接
接口代码<?php
/**
* 文件路径: \application\index\controller\JobTest.php
* 该控制器的业务代码中借助了thinkphp-queue 库,将一个消息推送到消息队列
*/
namespace app\api\controller;

use think\facade\Queue;

class JobTest {
    /**
     * 一个使用了队列的 action
     */
    public function test(){
      
        // 1.当前任务将由哪个类来负责处理。 
        //   当轮到该任务时,系统将生成一个该类的实例,并调用其 fire 方法
        $jobHandlerClassName = 'app\api\job\Hello'; 
        // 2.当前任务归属的队列名称,如果为新队列,会自动创建
        $jobQueueName        = "helloJobQueue"; 
        // 3.当前任务所需的业务数据 . 不能为 resource 类型,其他类型最终将转化为json形式的字符串
        //   ( jobData 为对象时,存储其public属性的键值对 )
        $jobData             = [ 'ts' => time(), 'bizId' => uniqid() , 'a' => 1 ] ;
        // 4.将该任务推送到消息队列,等待对应的消费者去执行
            // $isPushed = Queue::push($jobHandlerClassName , $jobData , $jobQueueName );
            $isPushed = Queue::later( 3, $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".PHP_EOL;
        }else{
            echo 'Oops, something went wrong.'.PHP_EOL;
        }
    }
}
<?php
  /**
   * 文件路径: \application\index\job\Hello.php
   * 这是一个消费者类,用于处理 helloJobQueue 队列中的任务
   */
  namespace app\api\job;

  use think\queue\Job;

  class Hello {
      
      /**
       * fire方法是消息队列默认调用的方法
       * @param Job            $job      当前的任务对象
       * @param array|mixed    $data     发布任务时自定义的数据
       */
      public function fire(Job $job,$data)
      {

          $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();
              }
          }
      }


      /**
       * 根据消息中的数据进行实际的业务处理...
       */
      private function doHelloJob($data) 
      {
          print("<info>Hello Job is Done!"."</info> \n");
          
          return true;
      }
  }
最佳答案
评论() 相关
后面还有条评论,点击查看>>