码迷,mamicode.com
首页 > 其他好文 > 详细

RabbitMQ丢单问题解析

时间:2018-03-26 20:47:13      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:分析   获取   修改   丢失   测试用例   inf   不可用   客户端   导致   

本人负责系统基础框架的搭建和数据处理,数据的大致流程:

技术分享图片

 

 主要包括:

  1. 搭建RabbitMQ和ElasticSearch服务
  2. 封装C++客户端提供给订单服务/账务服务等服务调用
  3. 把客户端写入RabbitMQ的数据同步到ElasticSearch
  4. 管理端通过查询ElasticSearch而不是数据库获取交易数据

上线后出现一个严重的问题:有些交易数据查询不到。分析后发现a)客户端没有报错; b)ElasticSearch没有订单数据; c)同步RabbitMQ数据到ElasticSearch的服务没有相关的日志。那么可以认定问题是RabbitMQ的客户端并没有把数据成功的发送给RabbitMQ.

定位问题

首选想到的会不会是线上的数据量大导致的,于是写了个测试用例在开发环境进行压测:https://github.com/TomeC/cookies/blob/master/mq_test.cpp,可以用Python去RabbitMQ拉取数据解析后看id是不是递增的,然而并没有发现问题。

在开发环境和测试环境是没有出现过这个问题的,而它们和线上的不同在于线上的环境多了个HAProxy.我是不支持加代理的,因为两个RabbitMQ一主一备,客户端自己切换完全没有问题,而如果加上代理的话一个肯定是不行的,万一这个HAProxy挂了那系统一样不可用,所以至少需要两台代理,从使用的角度来看还不如我直连两个RabbitMQ。之所以上线时加上代理是运维的意见,他们认为将来扩展的话直接修改代理代理就好了,不需要动服务的配置。这是完全合理的考虑,于是就临时加上了。

超时时间单位为秒,默认值为60,心跳包每半个超时时间发送一次。 丢失了两个心跳包, 连接被认为不可抵达。 不同的客户端有不同的提示, 但tcp连接都会被关闭。 

RabbitMQ丢单问题解析

标签:分析   获取   修改   丢失   测试用例   inf   不可用   客户端   导致   

原文地址:https://www.cnblogs.com/benjaming/p/8599682.html

(1)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!