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. aapt获取包名和activity,启动app

    1.android sdk的环境安装好了之后,在build-tools\** 的目录下找到aapt.exe,将这个路径设置环境变量,添加到path下 2.在cmdl里面输入:aapt,出现以下内容就是 ...

  2. L309 单音节词读音规则(一)-辅音字母发音规则

    1 字母和音素不是一一对应的 2单词读音规则知识结构全图 二 15个发音不变化的辅音字母:字母发音和音素一致 b / b /   by d / d /   dog f / f /     fish h ...

  3. MySQL:基础知识

    基础知识 一.软件的生命周期 软件定义 软件开发 软件使用与维护 二.数据(Data) 1.定义 描述客观事物特征或性质的某种符号,经过数字化处理存储在计算机 2.数据独立性 物理独立性:指用户的应用 ...

  4. (Object String 类中的方法练习)

    package com.zs.demo1; public class Demo1 { public static void main(String[] args) { fun1(); fun2(); ...

  5. Spring MVC之ResposeEntity下载文件

    Spring Mvc中用ResponseEntity方式下载文件如下: @RequestMapping("/download") public ResponseEntity< ...

  6. matlab调用规则变量名eval函数

    eval 函数运用!! 经常会遇到matlab里面有些变量命名其实有一样的规律,,但是不像矩阵这些是可以通过循环来获取的,这个时候就可以利用eval语句了:   首先,假设现在有10个名称类似的变量, ...

  7. rebuild online 创建时,会话被Kill修复索引测试

    rebuild online 创建时,会话被Kill修复索引 1.0实验目的:日常运维经常create index online,但是期间被kill会导致索引再次创建失败,测试解决该问题 2.0测试流 ...

  8. Unity 3D动态修改Shader状态,使物体透明等等

    Unity动态改Shader状态透明 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...

  9. HihoCoder - 1807:好的数字串 (KMP DP)

    Sample Input 6 1212 Sample Output 298 给定一个数字字符串S,如果一个数字字符串(只包含0-9,可以有前导0)中出现且只出现1次S,我们就称这个字符串是好的. 例如 ...

  10. ccf-170904-通信网络

    ccf-170904-通信网络 题目分析: 有向图 如果a可以直接或者间接连接b则a与b相互知晓 一共有多少个点知道n个点 刚开始算错复杂度,优化后反而超时 ...事实无脑爆搜这道题也是可取的因为只有 ...