2016-3-25突然推送大量消息的问题及查找 -- Sangit
起因:2016年3月25日 18:30 左右,突然接到客户投诉,说APP收到大量的任务推送消息,而且点击进去都是一些过期任务,我们将对此展开追踪,查找问题原因。
过程:
1、当时的第一反应是先查看redis的消息队列,发现redis队列里还仅存着一条数据
2、然后马上中断错误文件,当再查看消息队列时,仅剩下的一条消息也没了
3、之前反馈消息说只有iOS的收到,当时在想,会不会发送至iOS的function有误
4、为了确定是否iOS的发送function有问题,登录腾讯信鸽进入消息统计那里查看发送记录,然而发现Android端的也有发送,只是没有Android的用户反馈这问题
5、而且还发现信鸽列表每条消息所发送的用户数量是不一致的,这判断出发送时对用户的条件判断是生效的
6、然后代码对比,对比自己的代码与自己修改前的那一个版本看是否代码存在问题
7、对比发现新增加的代码基本不存在对发送主流程有影响的地方
8、在这时候认真的总结了一下消息发送流程,如下:
管理后台审核通过任务列表——点击推送按钮——填写要发送的标题与文字——把发送的文字添加到message表,把message的id写入到task表——把task的id存进redis消息队列
crontab定时器——每隔五分钟运行一遍message文件
message文件——检测redis消息队列是否有数据——循环发送——删除消息
9、这时候把自己觉得有出现可能都想了出来
1)代码是否存在问题
2)是否redis的key是否在其他地方有用到
3)redis是否会自动回滚,或者某些操作导致redis回滚
10、首先把查看代码问题,代码根据流程一步一步往上走:发送后删除消息,没有问题(因为根据过程的第1步redis队列的内容从有到无,证明已经删除,为了安全起见,重新走了一遍发送流程,发现没有问题);获取消息队列,循环没问题;管理后台消息写入,也没有问题
11、搜索redis队列的key是否在别的地方用到,管理后台搜索后发现只在当前页面用到,没有问题,在前台的接口文件搜索后发现不存在,没有问题,说明没有其他地方调用这个key;然后车看写入消息的function是否在其他页面用到,搜索前后台还是只有当前页面用到,也没有问题
12、那么最后好像只剩redis的问题了,对于redis这块由于不是很熟悉,只能通过百度来查找,发现还没有什么操作或者自动会让redis的某个可以回滚,然后在这步一直卡住,因为之前的都没有问题,好像就到了这里才有问题
13、对于这块的不熟悉,百度也没有结构,于是就向熟悉的同事问了一遍,他们根据流程跑了一遍发现也没什么问题,因为他们熟悉redis,觉得redis自动回滚的概率性太小了,觉得会不会是其他的问题导致消息队列存在数据
14、先是询问了一遍审核任务的同事,看是否有人一直在发送推送消息,然后得到的答复是一般都是审核通过就点击推送的,我们查了其中的任务,三月初的任务都有推送,这又卡住了
15、然后我们的大神说了一句,会不会因为上一个版本存在问题导致消息一直存在队列中,没有发送出去,之后新版本上线刚好修复了,从而把所有存在队列中的消息一起发送出去了
16、说到这个然我突然想起我在修改完测试时,程序在以前的代码块出现了错误,导致程序运行错误,当时我还在想为什么代码到我这就不行了
17、把代码恢复到我修改前的那一个版本,进行测试,发现真的是那个代码有错误
18、终于找到了原因╮(╯▽╰)╭
总结:通过这次的问题查找发现了自己存在很多问题:
1、当时的第一反应应该是马上中断程序,停止发送,而不应该是先去查看消息队列,自己在处理突发事件时缺乏经理,乱了阵脚
2、在发现出现的问题不属于自己版本时并没有留心或者向修改上一版本的同事求证,只是通过自己的修改完成,导致问题发生
3、发现自己在寻找问题的时候会陷入牛角尖,并没有及时的跳出来,想想其他的方面,只是在思考自己的开始所觉得的几个问题
4、自己找问题时不会怀疑他人把东西交到手的是否有问题,没有去质疑别人
这都是需要我努力改进。
2016-3-25突然推送大量消息的问题及查找 -- Sangit的更多相关文章
- C#微信接口之推送模板消息功能示例
本文实例讲述了C#微信接口之推送模板消息功能.分享给大家供大家参考,具体如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...
- C#微信公众号开发系列教程五(接收事件推送与消息排重)
微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...
- APNS推送通知消息负载内容和本地格式字符串
来源:http://hi.baidu.com/tangly888/blog/item/62948520121870559358074f.html 翻译苹果文档 地址: 翻译:tangly http: ...
- 微信开发之获取openid及推送模板消息
有很多的朋友再问我怎么获取code,openid之类的问题,在这里我就给大家分享一下. 在做微信支付是需要获取openid的,推送模板消息也是需要openid包括其他一些功能分享等也都是需要的,ope ...
- FineReport如何手动推送APP消息
在报表填报成功后,发送消息至APP会提示数据已更新.再次期间用户需要有查看该模板的权限,如果没有的话,则无法接受到提示信息.那么在FineReport移动端中,如何手动推送APP消息呢? 具体用法 在 ...
- .net平台推送ios消息
1,ios应用程序中允许向客户推送消息 2,需要有苹果的证书以及密码(怎么获取,网上搜一下,需要交费的) 3,iphone手机一部,安装了该ios应用程序 4,.net 项目中引用PushSharp. ...
- 转:C#微信公众号开发之接收事件推送与消息排重的方法
本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法.分享给大家供大家参考.具体分析如下: 微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这 ...
- 微信公众号实现无限制推送模板消息!可向指定openID群发
微信认证的服务号才有推送模板消息接口所以本文需要在认证服务号的情况下学习 以上就是模板消息,只有文字和跳转链接,没有封面图.在服务号的后台添加功能插件-模板消息即可. 模板消息,都是在后台选择一个群发 ...
- phonegap 使用极光推送实现消息推送
最近一直在研究各种推送,ios的由于是apns,比较容易实现,但是andriod的就比较麻烦.后来看了很多解决方案,gcm明显是不行的,其他的方案更是一头雾水,而且需要做第二次开发,太麻烦,后来就选择 ...
随机推荐
- C++:运算符重载函数之成员运算符重载函数
5.2.3 成员运算符重载函数 在C++中可以把运算符重载函数定义为某个类的成员函数,称之为成员运算符重载函数. 1. 定义成员运算符重载函数的语法形式 (1)在类的内部,定义成员运算符重载函数的格式 ...
- PHP Warning: date(): It is not safe to rely on the system's timezone settings.
OSSEC安装结束后运行,运行以下命令却抛错 cat /opt/ossec/logs/alerts/alerts.log 具体抛错内容: ** Alert 1468897672.2164786: ma ...
- unique() 去重函数
unique()函数是一个去重函数,STL中unique的函数 unique的功能是去除相邻的重复元素(只保留一个), 还有一个容易忽视的特性是它并不真正把重复的元素删除.他是c++中的函数, 所以头 ...
- bzoj3244
很不幸,这题我又被虐了,给个链接http://www.cnblogs.com/g-word/p/3288675.html ..] of longint; f:..,..] of longint; mx ...
- Asp.Net微信登录-电脑版扫描二维码登录
像京东,一号店等网站都实现了用微信来登录的功能,就是用手机上的微信扫一扫网站上的二维码,微信上确认后,即可自动用微信的帐号登录网站. 一.创建网站应用 在微信开放平台创建一个网站应用 https:// ...
- Android中Java反射技术的使用示例
import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Metho ...
- PHP中 对象自动调用的方法:__set()、__get()、__tostring()
总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传 ...
- web请求报出 “超过了最大请求长度” 【注意:重启IIS】
摘自:http://www.cnblogs.com/loalongblogs/archive/2012/10/16/2726372.html web请求报出 “超过了最大请求长度” 错误原因:as ...
- 编译安装lnmp
http://wenku.baidu.com/view/ec45d5dd28ea81c758f578cc.html
- Linux 7 中Yum 配置 说明
在之前的Blog中写了Linux Yum 的配置方法,参考: Linux 平台下 YUM 源配置 手册 http://www.cndba.cn/account/article/details/154 ...