请教关于调用分布式服务的事物一致性问题(调用微信支付宝支付)

krock_java 2016-10-19 11:53:18
比如在我们的代码里调用微信支付,这其实相当于一个分布式服务调用了
示例如下:

@ResponseBody
@RequestMapping(value = "wxpay",method = RequestMethod.POST)
public HttpResp pay(@RequestBody HttpWeiXinPayReq req) {
String ret = HttpUtils.doWxPayRequest(req);//调用微信支付接口
if("SUCCESS".equals(ret)){
tradeEntity.setstatus(1);
}else{
tradeEntity.setstatus(0);
}
xxxService.save(tradeEntity);//本地记录交易流水
}


这段代码是存在隐患的,有可能在调用微信支付成功后,本地服务挂了,这样事物就无法保证一致性了,请教高手这种应该怎么处理?谢谢
...全文
310 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
bree06 2016-10-19
  • 打赏
  • 举报
回复
先保存本地记录status均为0, 然后再调微信支付, 最后再更新状态到库(只更新成功的). xxxService.save(tradeEntity);//本地记录交易流水 String ret = HttpUtils.doWxPayRequest(req); paylogger.info("流水号 + ret结果"); // paylog与其它log分不同文件输出. if("SUCCESS".equals(ret)){ // TODO update } 为了上个双保险定期读取paylog的流水号和结果与DB相比较, 不正确时调用微信支付接口查询该流水号是否支付成功.如果成功了那再将DB的状态更新为1.

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧