一. 下面的是后台记录的日志:
[0602 20:30:01 237 INFO ] [queueContainer-3] commons.component.ActiveMQComponent - MQ receive Message: key=BD,value="thirdBD:{\"accountId\":\"001101632119535\",\"amount\":270.00,\"businessOrderId\":\"150602201831701656\",\"cardNo\":\"6222021507001069767\",\"externalCode\":\"1001\",\"externalMemo\":\"交易成功\",\"id\":\"20150602201831722169\",\"status\":1}"
[0602 20:30:01 238 INFO ] [queueContainer-3] common.mq.LostOrderQueueMessage - 自动补单MQ接收的内容[thirdBD:{"accountId":"001101632119535","amount":270.00,"businessOrderId":"150602201831701656","cardNo":"6222021507001069767","externalCode":"1001","externalMemo":"交易成功","id":"20150602201831722169","status":1}]
[0602 20:37:44 033 INFO ] [queueContainer-7] commons.component.ActiveMQComponent - MQ receive Message: key=BD,value="thirdBD:{\"accountId\":\"001101632119535\",\"amount\":270.00,\"businessOrderId\":\"150602201831701656\",\"cardNo\":\"6222021507001069767\",\"externalCode\":\"1001\",\"externalMemo\":\"交易成功\",\"id\":\"20150602201831722169\",\"status\":1}"
[0602 20:37:44 033 INFO ] [queueContainer-7] common.mq.LostOrderQueueMessage - 自动补单MQ接收的内容[thirdBD:{"accountId":"001101632119535","amount":270.00,"businessOrderId":"150602201831701656","cardNo":"6222021507001069767","externalCode":"1001","externalMemo":"交易成功","id":"20150602201831722169","status":1}]
[0602 20:37:44 046 INFO ] [queueContainer-7] common.mq.LostOrderQueueMessage - 自动补单结果[第三方](订单号:150602201831701656 | [补单失败]订单号:150602201831701656对应的支付流水不是处理中状态!)
[0602 20:40:20 647 INFO ] [queueContainer-3] common.mq.LostOrderQueueMessage - 自动补单结果[第三方](订单号:150602201831701656 | 目前补单只限定于P2P、EXP、FACTORING、TB及未交易成功的新手标产品)
二. 多加资产问题出现过程,一步步还原现场
1、20:18创建的订单
2、去支付,发现支付处理中
3、充值处理处理中。落在超时支付表中
4、20:30轮训出结果,发送mq给汇金进行补单
第一次补单失败:
休息5分钟:
20:35开始第二次补单,补单成功,,,,发邮件异常,,,,,40分钟继续处理。。。。
5、20:37突然来了一个消息,
根据支付流水发现是成功的,直接返回
6、20:40补单,订单状态已经改成成功了,所以match不到,改订单为失败
7、下面看8:37分钟的消息怎么发生的
先去。9拉取info日志,发现只在8:30发过消息
说明不是pay,发重复消息
那么估计就是mq重发消息了,
去看下线上配置mq,发现没有配置超时时间,那么就是默认的1s
但是实际上是7秒,有问题
继续看日志,发现在8:30分 huijin失去jms连接
在8:37分钟重新连接上,所以之前的连接mq不知道是否成功,所以重发了
三. 总结
通过这个案例, 任何中间件和程序都是有可能出现不可预测的问题, 主要在程序设计过程中要注意几个点:
1. 方法一定要支持幂等性支持, 防止重复调用
2. 提交方法要预申请token, 防止多次提交
3. 网络连接的操作要有超时时间, 超过超时时间, 一定要断开
分享到:
相关推荐
电动机热敏电阻作用_多加一只器件解决大麻烦电动机.docx
|-- 解决 自动补全功能换行后末尾会多加空格问题 |-- 解决 软件最大化后,点击标题栏位置无法激活最前面问题 |-- 解决 取消修改脚本时提示使用自动备份的脚本后为空文档问题 |-- 解决 释放附件文件时,无法取消覆盖...
C语言程序设计(第2版)-2期 常见问题5-1 white(表达式)后多加了分号.pdf 学习资料 复习资料 教学资源
C语言程序设计(第2版)-2期 常见问题4-1 if(表达式)后多加了分号.pdf 学习资料 复习资料 教学资源
该代码可以将汉字转全拼音。但是里面对多音字没有多加处理,但是都是常用音为主
论文研究-多加性元素GERT网络解析法.pdf, 本文在基本GERT网络解析法的基础上,应用信号流图理论和概率统计方法,导出了多加性元素GERT网络解析法的理论,用该方法可象时间变量一样将费用变量作为决策变量,从而进一步...
最近在项目开发过程中遇到如下问题:开发环境中设置的字体样式使用webpack打包后到生产环境不生效。如图: 打开控制台查看元素样式,发现在开发环境的时候”微软雅黑”被解析成unicode编码并且带着双引号, 但使用...
基于Python复合材料多加筋整体构件ABAQUS前处理二次开发
基于Python复合材料多加筋整体构件ABAQUS前处理二次开发.pdf
本文实例讲述了Python实现的当前时间多加一天、一小时、一分钟操作。分享给大家供大家参考,具体如下: 首先看下,datetime的使用 >>> import datetime >>> print datetime.datetime.now() 2017-07-15 15:01:24....
8_8led屏全方位移动,希望觉得好的就请多加分数给我,.zip
安装简单,局域网内部通讯及时,特好特后悔就是看了几分古朴
ocr 来自网上 ×××××××
基于FPGA实现加解密系统时,采用多种算法处理数据可以适应不同的应用环境与功能需求,但在同一片上实现...针对以上问题,以动态可重构技术为核心,基于ZYNQ-7000系列FPGA设计动态可重构控制平台,通过片上Cortex-A9 ARM处理
一、基于scratch3.0的少儿编程在线模式,开启在线教学获客方式,体验有温度、有人情味的系统,解决编程培训机构线上业务的需求。 二、基于scratch3.0版本开发,平台采用THINKPHP5、VUE.js相结合 线上线下相互引流...
清除CMOS的跳线一般在主板的锂电池附近,其默认位置一般为1、2短路,只要将其改跳为2、3短路几秒种即可解决问题,对于以前的老主板如若用户找不到该跳线,只要将电池取下,待开机显示进入CMOS设置后再关机,将电池上...
体验有温度、有人情味的系统,解决编程培训机构线上业务的需求。 二、基于scratch3.0版本开发,平台采用THINKPHP5、VUE.js相结合 线上线下相互引流的新零售模式。通过大数据技术、人工智能技术, 定制界面设计...