queue

浏览:413 发布日期:2020/11/18 分类:ThinkPHP6专区
这里是生产者public function actionWithHelloJob(){

        $jobHandlerClassName  = 'app\duilie\job\Hello';
        $jobDataArr             = [
            'uid' => rand(1,10),
            'group_id' => rand(10,99),
        ] ;
        $jobQueueName = "helloJobQueue";

        // 4.将该任务推送到消息队列,等待对应的消费者去执行
        $isPushed = Queue::push($jobHandlerClassName , $jobDataArr , $jobQueueName );
        //$isPushed = Queue::later(10,$jobHandlerClassName , $jobDataArr , $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.';
        }

    }
这里是消费者 模拟false以后 当这个任务小于三次就重新发送 大于三次后就删除该任务 但是出现了无线循环$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) {
                $job->delete();
                //通过这个方法可以检查这个任务已经重试了几次了
                print("<warn>Hello Job has been retried more than 3 times!"."</warn>\n");
                // 也可以重新发布这个任务
            }else{
                print("<info>Hello Job will be availabe again after 2s."."</info>\n");
                $job->release(2); //$delay为延迟时间,表示该任务延迟2秒后再执行
            }
        }
private function checkDatabaseToSeeIfJobNeedToBeDone($data){
            if ($data['uid'] == 2){
                return false;
            }
            return true;
         }

        /**
         * 根据消息中的数据进行实际的业务处理...
         */
        private function doHelloJob($data)
        {
           $datas = Db::name('admin_auth_group_access')->insert($data);
           if ($datas){
               return false;
           }
            return false;
        }
最佳答案
评论( 相关
后面还有条评论,点击查看>>