起因: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的更多相关文章

  1. 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 ...

  2. C#微信公众号开发系列教程五(接收事件推送与消息排重)

    微信公众号开发系列教程一(调试环境部署) 微信公众号开发系列教程一(调试环境部署续:vs远程调试) C#微信公众号开发系列教程二(新手接入指南) C#微信公众号开发系列教程三(消息体签名及加解密) C ...

  3. APNS推送通知消息负载内容和本地格式字符串

    来源:http://hi.baidu.com/tangly888/blog/item/62948520121870559358074f.html 翻译苹果文档 地址:  翻译:tangly http: ...

  4. 微信开发之获取openid及推送模板消息

    有很多的朋友再问我怎么获取code,openid之类的问题,在这里我就给大家分享一下. 在做微信支付是需要获取openid的,推送模板消息也是需要openid包括其他一些功能分享等也都是需要的,ope ...

  5. FineReport如何手动推送APP消息

    在报表填报成功后,发送消息至APP会提示数据已更新.再次期间用户需要有查看该模板的权限,如果没有的话,则无法接受到提示信息.那么在FineReport移动端中,如何手动推送APP消息呢? 具体用法 在 ...

  6. .net平台推送ios消息

    1,ios应用程序中允许向客户推送消息 2,需要有苹果的证书以及密码(怎么获取,网上搜一下,需要交费的) 3,iphone手机一部,安装了该ios应用程序 4,.net 项目中引用PushSharp. ...

  7. 转:C#微信公众号开发之接收事件推送与消息排重的方法

    本文实例讲述了C#微信公众号开发之接收事件推送与消息排重的方法.分享给大家供大家参考.具体分析如下: 微信服务器在5秒内收不到响应会断掉连接,并且重新发起请求,总共重试三次.这样的话,问题就来了.有这 ...

  8. 微信公众号实现无限制推送模板消息!可向指定openID群发

    微信认证的服务号才有推送模板消息接口所以本文需要在认证服务号的情况下学习 以上就是模板消息,只有文字和跳转链接,没有封面图.在服务号的后台添加功能插件-模板消息即可. 模板消息,都是在后台选择一个群发 ...

  9. phonegap 使用极光推送实现消息推送

    最近一直在研究各种推送,ios的由于是apns,比较容易实现,但是andriod的就比较麻烦.后来看了很多解决方案,gcm明显是不行的,其他的方案更是一头雾水,而且需要做第二次开发,太麻烦,后来就选择 ...

随机推荐

  1. Wince 中如何实现注册表恢复原厂设置

    理论: 使用HIVE注册表,系统在完成了第一阶段也就是加载完了boot.hv+binfs之后和加载系统HIVE注册表之前,filesys.exe都会调用OEMIoControl来查询是否需要清除保存在 ...

  2. devDependencies和dependencies的区别

    我们在使用npm install 安装模块或插件的时候,有两种命令把他们写入到 package.json 文件里面去,比如: --save-dev --save 在 package.json 文件里面 ...

  3. uva580Critical Mass

    递推.   用f[i]代表i个盒子的放法,设g[i]=2^n-f[i],代表i个盒子不满足条件的放法. 枚举第一个U所在的位置j.则方法有g[j-2]*(2^(i-j-2))种,j-1必须是L. 所以 ...

  4. Jqgrid入门-使用模态对话框编辑表格数据(三)

            Jqgrid是一个强大的表格插件,它提供了多种方式来编辑数据.这三种方式分别是: Cell Editing——只允许修改某一个单元格内容 Inline Editing——允许在jqGr ...

  5. HDU 4609 3-idiots (FFT-快速傅立叶变换)

    [题意]给定N个树枝,求从中取出三个可以围成三角形的概率 [思路] 2013多校训练第一场比赛1010题. 一开始就想到了O(n^2)枚举前两个树枝和的算法,赛后群里大牛说计算所有两个树枝和的情况可以 ...

  6. GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法

    GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理 ...

  7. LeetCode:Sort List

    Title: Sort a linked list in O(n log n) time using constant space complexity. 思路:考虑快速排序和归并排序,但是我的快速排 ...

  8. Spring学习之AOP

    Spring-AOP(Aspect-orented programming) 在业务流程中插入与业务无关的逻辑,这样的逻辑称为Cross-cutting concerns,将Crossing-cutt ...

  9. HDU 4630-No Pain No Game(线段树+离线处理)

    题意: 给你n个数的序列a,q个询问,每个询问给l,r,求在下标i在[l,r]的区间任意两个数的最大公约数中的最大值 分析: 有了hdu3333经验,我们从左向右扫序列,如果当前数的约数在前面出现过, ...

  10. NSThread 多线程相关

    1.下面的代码,有2点需要注意,1>就是 就是thread:所传得参数,这里传得的是nsarray 当然也可以传其他的类型.2> [self performSelectorOnMainTh ...