php调用Redis队列使用例子

时间:2023-03-08 18:48:40
php调用Redis队列使用例子

1.Controller顶部引入use think\Queue;

2.Controller调用Redis任务

                    // 1.当前任务将由哪个类来负责处理。
$job = 'app\api\job\ResumeTaskExecution';
// 2.将该任务推送到消息队列,等待对应的消费者去执行
$task_id = config('qiji_resume');//简历任务id是21
$data = ['task_id'=>$task_id,'uuid'=>$uuid,'mobile'=>$userinfo['data']['mobile']];
$isPushed = Queue::push( $job , $data);
// database 驱动时,返回值为 1|false ; redis 驱动时,返回值为 随机字符串|false
if( $isPushed !== false ){
return true;
}

3.队列控制器

<?php
/**
* Created by PhpStorm.
* User: fgf
* Date: 2018-01-25
* Time: 下午15:44
*/ namespace app\api\job; use think\Log;
use think\queue\Job;
use org\Response;
use Potting\Curl;
use think\Cache; /**
* Redis队列推送完善简历信息给奇骥
* Class TaskExecution
* @package app\api\job
*/
class ResumeTaskExecution
{
//完善简历信息更新异步通知合作第三方
public function fire(Job $job, $data )
{
trace('****************TaskExecution start**********************');
//获取奇骥 access_token
$token_info = self::get_qj_token();
$token_type = $token_info['message']['token_type'].' ';
$access_token = $token_info['message']['access_token'];//提取access_token
//获取奇骥任务列表
// $task_list_info = self::task_list($token_type,$access_token);
// $task_id = $task_list_info['message']['data'][0]['task_id'];//提取任务id
$task_id = $data['task_id'];//完善简历任务id是21
$uuid = $data['uuid'];//奇骥标识uuid
$tel = $data['mobile'];
$mobile = self::mobile_change($tel);//手机号中间四位转*号
// print("<info>Hello Job has been done and deleted".$mobile."</info>\n");
//任务执行
$task_execution_info = self::task_execution($token_type,$access_token,$task_id,$uuid,$mobile); //如果任务执行成功后 记得删除任务,不然这个任务会重复执行,直到达到最大重试次数后失败后,执行failed方法
if ($task_execution_info){
trace(json_encode($task_execution_info));
// print("<info>Hello Job has been done and deleted".print_r($task_execution_info)."</info>\n");
$job->delete();
}
} /**
* 手机号中间四位转*号
* @param $tel 手机号码
* @return mixed
*/
public function mobile_change($tel){
$str = substr($tel,0,3);
$strs = substr($tel,0,4);
if ($str == '+86'){
$tel_sub = substr($tel,3,11);
}elseif ($strs == '+852' || $strs == '+853' || $strs == '+886'){
$tel_sub = substr($tel,4,11);
}
return substr_replace($tel_sub, '****', 3, 4);
} /**
* 获取奇骥 access_token
* @return array
*/
public function get_qj_token()
{
$appid = config('qiji_appid');
$secret = config('qiji_secret');
$url = config('qiji_url').'/api/client/token?appid='.$appid.'&secret='.$secret;
//静态调用引入的扩展Curl类的curlGet()方法获取奇骥 access_token
$data = Curl::curlGet($url);
return Response::response(0,[],$data);
} /**
* 获取奇骥任务列表
* @return array
*/
public function task_list($token_type,$access_token)
{
// $authorization = 'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImp0aSI6ImQyMzAxZGJhNjBjM2YxZmRiYmNiNDU2MzYyY2Y3Njc3MmZlZjk0OGFhMDIyNTE1ZmEzYjg0ZDJlMTA4NzY5MmY4YTZkNGFmM2E2N2ZiYzg4In0.eyJhdWQiOiIyIiwianRpIjoiZDIzMDFkYmE2MGMzZjFmZGJiY2I0NTYzNjJjZjc2NzcyZmVmOTQ4YWEwMjI1MTVmYTNiODRkMmUxMDg3NjkyZjhhNmQ0YWYzYTY3ZmJjODgiLCJpYXQiOjE1MjQ0NDY0MzAsIm5iZiI6MTUyNDQ0NjQzMCwiZXhwIjoxNTU1OTgyNDI5LCJzdWIiOiIxMyIsInNjb3BlcyI6WyIqIl19.flvULsa_kyrsW11yHplqSnFH8bvKFrYfUD_y0b6OjrjdHJ-mhKCMZy64h1UkfYJVGK-ntTIx8dXQQzqbDzWiRS8XWOVQznu9hKMbRh3KzRd28hv7FuYPHLZEfUhS8qsMykyIbVK3-gbjJXn093l1VqRIkls_YehNn7xsViJng73yNma4B160rUfrUZX7jOqlaazDflSepudPEfeYwKWYEXwo8uXAsRS3l0kN3i84Zwc0DOZfjG4FebXAqqNVBINKOFaexPtvJIkyV_0oHQpujoJBIwx528QlZHyrmsVsm9tlMRLpZctRQpkbIvWyPjkZ6pREV8AablQGGIXkCBLU9mak1RVyV7J3LnCQ4UgHn1vAao6gUQ_YoBEmiymnwCeScNJwxM9VzDKICBjtDJh7rlarx_R9VKYpGURzYydN2HBRBRsrx0ju1qFFC5_lm4zLLPC2XlnlJzlnMDjyQeLexGbRVUe9uxzWVCBpg-GP-REzaTLLBLpHNAbv_x5H0-lMc3uAqSAHlugQIPUE3GCsN576OkW7eEr_kXbcjYytZjYZmEYRW0IRXNQaJOm39DsWDdE59MCnWmkC2QYAB3H4ShsSnoCd3XW37BDTVQkEGqeFKQ49z47j1WKlzvdJ90vSNPkqeOld8n3vtRPGCN9kYw4nXRnmg86OcMeG-4OFVf0';
$authorization = $token_type.$access_token;
$url = config('qiji_url').'/api/client/tasks';
//静态调用引入的扩展Curl类的curlGetHeader()方法请求任务列表
$data = Curl::curlGetHeader($url,$authorization);
return Response::response(0,[],$data);
} /**
* 任务执行
* @param $uuid 奇骥的用户标识
* @param $task_id 任务id
* @return array
*/
public function task_execution($token_type,$access_token,$task_id,$uuid,$mobile)
{
$authorization = $token_type.$access_token;
$url = config('qiji_url').'/api/client/tasks/'.$task_id.'/execute';
// $uuid = "20333930-4478-11e8-b2ec-bb1cfbef82f1";//奇骥的用户标识
// $record = "ceshi!";//执行过程记录
$data = array(
"uuid"=>$uuid,//奇骥的用户标识
"record"=>'完成信息:用户“'.$mobile.'”完成“易展翅完善简历”任务',//执行过程记录
);
//静态调用引入的扩展Curl类的curlPostHerder()方法请求任务执行
$info = Curl::curlPostHerder($url,$data,$authorization);
return Response::response(0,[],$info);
} public function failed($data)
{
return 'failed';
// ...任务达到最大重试次数后,失败了
}
}