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';
// ...任务达到最大重试次数后,失败了
}
}
php调用Redis队列使用例子的更多相关文章
- Python的Flask框架应用调用Redis队列数据的方法
转自:http://www.jb51.net/article/86021.htm 任务异步化 打开浏览器,输入地址,按下回车,打开了页面.于是一个HTTP请求(request)就由客户端发送到服务器, ...
- thinkphp本地调用Redis队列任务
1.安装配置好Redis 2.进入项目根目录文件夹输入cmd进入命令行 3.输入php think 查看php扩展 4.输入 php think queue:listen 启动队列监听
- 30个php操作redis常用方法代码例子
From: http://www.jb51.net/article/51884.htm 这篇文章主要介绍了30个php操作redis常用方法代码例子,本文其实不止30个方法,可以操作string类型. ...
- python 结合redis 队列 做一个例子
结合redis 队列 做了一个例子 #!/usr/bin/env python # coding: utf-8 # @Time : 2018/12/21 0021 13:57 # @Site : # ...
- .NET 环境中使用RabbitMQ RabbitMQ与Redis队列对比 RabbitMQ入门与使用篇
.NET 环境中使用RabbitMQ 在企业应用系统领域,会面对不同系统之间的通信.集成与整合,尤其当面临异构系统时,这种分布式的调用与通信变得越发重要.其次,系统中一般会有很多对实时性要求不高的 ...
- c#之Redis队列在邮件提醒中的应用
场景 有这样一个场景,一个邮件提醒的windows服务,获取所有开启邮件提醒的用户,循环获取这些用户的邮件,发送一条服务号消息.但问题来了,用户比较少的情况下,轮询一遍时间还能忍受,如果用户多了,那用 ...
- c#之Redis队列
摘要 这两天一直在考虑redis队列:一个生产者,多个消费者的情况,这里弄了一个demo进行测试. 一个例子 关于如何引用Redisclient 可以参考之前的这篇文章:c#之Redis实践list, ...
- redis队列的实现
redis中文官网:http://www.redis.cn/ 关于redis队列的实现方式有两种: 1.生产者消费者模式. 2.发布者订阅者模式. 详解: 1.生产者消费者模式. 普通版本: 比如一个 ...
- 转载:【高并发简单解决方案 | 靠谱崔小拽 】redis队列缓存 + mysql 批量入库 + php离线整合
需求背景:有个调用统计日志存储和统计需求,要求存储到mysql中:存储数据高峰能达到日均千万,瓶颈在于直接入库并发太高,可能会把mysql干垮. 问题分析 思考:应用网站架构的衍化过程中,应用最新的框 ...
随机推荐
- if-else和while循环
用户登陆验证: if-else 判断 #!/usr/bin/env python # -*-coding:utf-8 -*- import getpass passwd=' name='sunhao' ...
- springMVC学习五(转发和乱码)
摘录http://www.cnblogs.com/xdp-gacl/p/3798347.html http://www.cnblogs.com/xdp-gacl/p/3798347.html 四个很重 ...
- Effective Java Chapter4 Classes and Interface
MInimize the accessibility of classes and members 这个叫做所谓的 information hiding ,这么做在于让程序耦合度更低,增加程序的健壮性 ...
- 移动端touchmove卡顿
网上提到的优化技术: 1.window. requestAnimationFrame() a.不用定义时间间隔,避免间隔长:卡顿,间隔短:浏览器漏帧的情况.由浏览器在绘制完一帧后自动再次调用绘制下一帧 ...
- <spark入门><Intellj环境配置><scala>rk入门><Intellj环境配置><scala>
# 写在前面: 准备开始学spark,于是准备在IDE配一个spark的开发环境. 嫌这篇格式不好的看这里链接 用markdown写的,懒得调格式了,么么哒 # 相关配置: ## 关于系统 * mac ...
- 九、编写led驱动
led.c #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #i ...
- 1-log4j2入门
一.入门介绍 log4j apache实现的一个开源的日志组件 slf4j 日志接口即为所有日志框架制定的一种规范的标准接口,并不是一个框架的具体实现,需要配合具体的日志框架使用(如log4j2.lo ...
- python 时间戳转换格式
1.简介 在编写代码时,往往涉及时间.日期.时间戳的相互转换. 2.示例 # 引入模块 import time, datetime 2.1 str类型的日期转换为时间戳 1 # 字符类型的时间 2 t ...
- [工作日志] 2018-12-06 重点: 解决安全测试bug
安全测试bug 业务端提出, 在修改是否给联系人发送短信接口,如果操作人和被操作的联系人不在同一个企业的情况下, 也是可以修改的. 解决办法: 加校验.
- 16 多校 8 Ball (贪心排序)很巧妙的思路啊~
ZZX has a sequence of boxes numbered 1,2,...,n1,2,...,n. Each box can contain at most one ball. You ...