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';
// ...任务达到最大重试次数后,失败了
}
}

php调用Redis队列使用例子的更多相关文章

  1. Python的Flask框架应用调用Redis队列数据的方法

    转自:http://www.jb51.net/article/86021.htm 任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器, ...

  2. thinkphp本地调用Redis队列任务

    1.安装配置好Redis 2.进入项目根目录文件夹输入cmd进入命令行 3.输入php think 查看php扩展 4.输入 php think queue:listen 启动队列监听

  3. 30个php操作redis常用方法代码例子

    From: http://www.jb51.net/article/51884.htm 这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型. ...

  4. python 结合redis 队列 做一个例子

    结合redis 队列 做了一个例子 #!/usr/bin/env python # coding: utf-8 # @Time : 2018/12/21 0021 13:57 # @Site : # ...

  5. .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇

    .NET 环境中使用RabbitMQ   在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...

  6. c#之Redis队列在邮件提醒中的应用

    场景 有这样一个场景,一个邮件提醒的windows服务,获取所有开启邮件提醒的用户,循环获取这些用户的邮件,发送一条服务号消息.但问题来了,用户比较少的情况下,轮询一遍时间还能忍受,如果用户多了,那用 ...

  7. c#之Redis队列

    摘要 这两天一直在考虑redis队列:一个生产者,多个消费者的情况,这里弄了一个demo进行测试. 一个例子 关于如何引用Redisclient 可以参考之前的这篇文章:c#之Redis实践list, ...

  8. redis队列的实现

    redis中文官网:http://www.redis.cn/ 关于redis队列的实现方式有两种: 1.生产者消费者模式. 2.发布者订阅者模式. 详解: 1.生产者消费者模式. 普通版本: 比如一个 ...

  9. 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合

    需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...

随机推荐

  1. 使用Maven+ssm框架搭建一个web项目

    1,前期准备:Eclipse(Mars.2 Release (4.5.2)).jdk1.7.tomcat7.maven3.2.1 2.使用eclipse中的maven新建一个web项目 点击next: ...

  2. Beta阶段冲刺---Day1

    一.Daily Scrum Meeting照片 二.讨论项目每个成员的昨天进展 由于今天是Beta阶段冲刺的第一天,因此每个成员没有昨日进展. 我们在昨天把未来五天的其他科目的作业都一起做完了(手动斜 ...

  3. Python 内置函数2

    print(list("胡辣汤")) lst = ["河南话", "四川话", "东北", "山东" ...

  4. L1-028. 判断素数

    本题的目标很简单,就是判断一个给定的正整数是否素数. 输入格式: 输入在第一行给出一个正整数N(<=10),随后N行,每行给出一个小于231的需要判断的正整数. 输出格式: 对每个需要判断的正整 ...

  5. Primise --(mongoose's default promise library)

    今天在学nodejs的时候,遇到一个错误;刚开始完全不知道说的是什么,为什么会出现这个错误 DeprecationWarning: Mongoose: mpromise (mongoose's def ...

  6. n 中选 m —— 随机采样的艺术

    0,1,2-n-1,n 个数中随机取 m 个数,要求 0, 1, n-1,此 n 个数每个数被取到的概率相同: Knuth 书中的随机化方法,很容易写出: void genkunth (int n, ...

  7. sharpkeys键盘按键重映射

    /********************************************************************** * sharpkeys键盘按键重映射 * 说明: * 键 ...

  8. /dev/i2c-*不见了

    /********************************************************************** * /dev/i2c-*不见了 * 说明: * 能在他的 ...

  9. 【Eigen开源库】linux系统如何安装使用Eigen库

    code /* * File : haedPose.cpp * Coder: * Date : 20181126 * Refer: https://www.learnopencv.com/head-p ...

  10. C5-fasterrcnn-小象cv-code

    1.# Path to Shapes trained weightsSHAPES_MODEL_PATH = os.path.join(ROOT_DIR, "mask_rcnn_shapes. ...