php的mq客户端获取队列方法改造
获取mq中消息然后处理失败重试机制:
下面的代码是php连接mq客户端的获取queue队列中的消息代码:
public function createDurableSubscriber($queue,$callback){
$f = $this->con->subscribe($queue);
while(1){
$msg = $this->con->readFrame();
if ($msg!=null) {
echo "Received message with body '$msg->body'\n";
$result = call_user_func($callback,$msg);
//底层方法接口改造
//在调用接口的场景下,需要在调用接口成功之后,才告知已消费消息(调用ack方法);
//如果调用接口失败之后,需要保留消息并重试,直到调用接口成功,消费掉消息
//如果接口调用失败,仍然要告知已消费消息(调用ack方法),在其他地方进行重试判断
$this->con->ack($msg);
}
}
unset($this->con);
}
每次推送msg到queue时,需要额外推送一个标记retry_count。初始值为0。
从queue获取msg处理失败之后(调用接口失败),需要重新推送msg到queue,并且额外标记retry_count加1,这时retry_count=1;
以此类推,每次retry_count都加1。重试10次,直到retry_count=10,如果处理失败,就不重试,但是发送rtx提醒给相关负责人。
这里用到递归的概念。
php的mq客户端获取队列方法改造的更多相关文章
- Python/dotNET Redis服务连接客户端调用SET方法的同时获取Redis服务器返回的内容
在用Python或dotNET redis客户端连接redis服务器的时候,当你调用客户端的SET方法后同时还想得到其返回的字符串,那么需要处理一下. 1. Redis Python redis客户端 ...
- Cookie的使用、Cookie详解、HTTP cookies 详解、获取cookie的方法、客户端获取Cookie、深入解析cookie
Cookie是指某些网站为了辨别用户身份.进行session跟踪而存储在用户本地终端上的数据(通常经过加密),比如说有些网站需要登录才能访问某个页面,在登录之前,你想抓取某个页面内容是不允许的.那么我 ...
- [转]Android 如何根据网络地址获取网络图片方法
http://blog.csdn.net/xiazdong/article/details/7724103 目录(?)[-] h2pre namecode classhtml stylefont-we ...
- JAVA文件中获取路径及WEB应用程序获取路径方法
JAVA文件中获取路径及WEB应用程序获取路径方法 1. 基本概念的理解 `绝对路径`:你应用上的文件或目录在硬盘上真正的路径,如:URL.物理路径 例如: c:/xyz/test.txt代表了tes ...
- 基于NIO的同步非阻塞编程完整案例,客户端发送请求,服务端获取数据并返回给客户端数据,客户端获取返回数据
这块还是挺复杂的,挺难理解,但是多练几遍,多看看研究研究其实也就那样,就是一个Selector轮询的过程,这里想要双向通信,客户端和服务端都需要一个Selector,并一直轮询, 直接贴代码: Ser ...
- tcp程序设计--客户端获取服务器输入输出流
tcp程序设计--客户端获取服务器输入输出流 思路: 第一步:实例化一个ServerSocket对象(服务器套接字),用来等待网络上的请求(也就是等待来连接的套接字) 第二步:调用accept()方法 ...
- WCF客户端获取服务端异常[自定义异常]
引言 经过不断的摸索,询问/调试,终于学会了关于WCF客户端与服务端之间异常的处理机制,在此来记录自己的成果,用于记录与分享给需要的伙伴们. 首先感谢[.NET技术群]里群主[轩]的大力帮助,如有需要 ...
- RabbitMQ获取队列的消息数目
使用RabbitMQ,业务需求,想要知道队列中还有多少待消费待数据. 方式一: @Value("${spring.rabbitmq.host}") private String h ...
- 使用rabbitmq手动确认消息的,定时获取队列消息实现
描述问题 最近项目中因为有些数据,需要推送到第三方系统中,因为数据会一直增加,并且需要与第三方系统做相关交互. 相关业务 本着不影响线上运行效率的思想,我们将增加的消息放入rabbitmq,使用另一个 ...
随机推荐
- highCharts 图表统计控件使用方法
1.首先引用js文件 在引用上面文件时,保证已经引用了jquery.js文件.且位置在上面两个文件之前. 2. <div id="container" style=" ...
- js 获取鼠标位置坐标
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- C语言笔记(数组地址一些细节)
一.数组的a+1和&a+1的区别 先看看测试代码: ]={}; printf(" sizeof(data) = %d.\n", sizeof(data)); printf ...
- light oj 1248 第六周E题(期望)
E - 期望(经典问题) Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%lld & %llu Descri ...
- Scut 进阶:EntityChangeEvent
EntityChangeEvent 最重要的两个变量:ItemEvent.ChildrenEvent. ItemEvent 的功能流转: 从整个跳转图可以看出,这个功能的作用是 -- 自动将数据修改保 ...
- WebApp之Meta标签 (关闭自动识别数字为电话号码或邮箱之类)
iPhone上的Safari(还有些webkit android手机浏览器)会自动对看起来像是电话号码的数字串(包括已经加入连字符或括号格式化过的)添加电话链接,点击之后会询问用户是否想要拨打该号码. ...
- CentOS 6用snmp配合MRTG显示系统状态
1. 软件安装以yum的方式安装snmp/MRTG 安装SNMP(要记得安装net-snmp-utils,不然snmpwalk将不能使用)yum -y install net-snmp* 安装MRTG ...
- 深度学习“引擎”之争:GPU加速还是专属神经网络芯片?
深度学习“引擎”之争:GPU加速还是专属神经网络芯片? 深度学习(Deep Learning)在这两年风靡全球,大数据和高性能计算平台的推动作用功不可没,可谓深度学习的“燃料”和“引擎”,GPU则是引 ...
- UVa 10837 A Research Problem 欧拉函数
题意: 给你一个欧拉函数值 phi(n),问最小的n是多少. phi(n) <= 100000000 , n <= 200000000 解题思路: 对于欧拉函数值可以写成 这里的k有可能是 ...
- POJ2240 Arbitrage(最短路)
题目链接. 题意: 根据汇率可以将一种金币换成其他的金币,求最后能否赚到比原来更多的金币. 分析: 最短路的求法,用floyd. #include <iostream> #include ...