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. SpringMVC学习二

    处理请求 今天学了三种请求,一种是 PathVariable ,一种是 RequestParam ,还有一种是CookieValue,并实现简单rest增删改查 上代码 package com.spr ...

  2. Join Algorithm

    Join(SQL) An SQL join clause combines columns from one or more tables in a relational database. It c ...

  3. L323 英语有必要学语法吗

    The Agony and Ecstasy of Grammar “Underline a relative clause.” This challenge would give a lot of a ...

  4. L273 NCAA

    On Friday, the system that prevents college athletes from being compensated for their labor (beyond ...

  5. spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

    //假设这是一个service类的片段 try{ //出现异常 } catch (Exception e) { e.printStackTrace(); //设置手动回滚 TransactionAsp ...

  6. [JetBrains注册] 利用教育邮箱注册JetBrains产品(pycharm、idea等)的方法

    我们在使用JetBrains的一些产品时,大多使用网上的一些key去注册或者pojie的,但是由于提供这些key的服务器并不能保证稳定可用,所以可能一段时间我们使用的ide又需要重新pojie. 这里 ...

  7. Java中的13个原子操作类

    java.util.concurrent.atomic包一共提供了13个类.属于4种类型的原子更新方式,分别是原子更新基本类型,原子更新数组,原子更新引用和原子更新属性.Atomic包里的类基本都是使 ...

  8. 第七十五课 图的遍历(DFS)

    添加DFS函数: #ifndef GRAPH_H #define GRAPH_H #include "Object.h" #include "SharedPointer. ...

  9. ajax跨域(No 'Access-Control-Allow-Origin' header is present on the requested resource)

    问题 在某域名下使用Ajax向另一个域名下的页面请求数据,会遇到跨域问题.另一个域名必须在response中添加 Access-Control-Allow-Origin 的header,才能让前者成功 ...

  10. 【leetcode】345. Reverse Vowels of a String

    problem 345. Reverse Vowels of a String class Solution { public: string reverseVowels(string s) { , ...