rabbitMq 全量同步数据 出现consumer和mq断开

有个需求,需要从其他系统全量同步供应商数据(大概有40万的信息,每个信息有大量的数据,需要保存到多个表中),第一次同步发下触发了GC,同时发现consumer从mq断开。
然后开始排查,第一步怀疑是oom,创建对象过多,cup高负荷运行,导致内存oom,
针对这个问题,使用了克隆clone方式,实体类实现
实现Cloneable接口就可以克隆
添加克隆后,启动全量同步,发现还是oom,然后又排查是否还有其他大对象生成,检查代码后,发现每个消息都会生成一个ArrayList,而且还没有默认容量,这样会导致扩容,扩容会导致消化大量的内存。解决方式,默认容量,给了个500
ArrayList<>(500),然后同步,发现还是断开了,这时候没有oom了,也就是说解决了内存问题,有出现了新问题,为什么consumer和断开。
经常一系列的排查,发现最有可能出现的是consumer消息挤压导致的,大量的消息来不及消费,而consumer又不停从queue中获取新的消息,导致挤压,最后断开连接。
发现问题后,设置consumer每次去获取1条消息,等这条消息消费完后,ack后才去获取吓一条消息
设置consumer每次消费一个消息,开启消费ack
最后启动全量,客服端显示消费1
这样确保了全量的同步成功

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值