mq消息挤压问题

文章描述了一种短信发送平台的设计,包括导入手机号、异步发送、MQ消息处理和Redis队列的使用。在测试环境中遇到200w短信发送的性能问题,主要表现为MQ消息堆积和数据库更新缓慢。问题排查发现是由于更新SQL未包含分片字段导致。解决方案是手动编写XML并采用异步线程执行更新,以减少MQ消息挤压。
摘要由CSDN通过智能技术生成

1.链路设计:

        短信发送平台,短信发送功能

        a,页面上导入手机号码提交(立即生成对应的批次号),异步短信发送流程。

        b,短信发送流程为对每个手机号构建对应的明细信息,统一入库,入库完成进行短信校验操作,使用流程框架对每个手机号校验(100w就是100w次),校验完成对通过mq明细表进行更新(短信状态,内容等)(对应代码),然后放入redis队列。

        c,在hallway(发送短信模块),使用netty建立通道连接(文本短信的协议为tcp长连接)从redis取出数据发送短信。

        d,发送完成,通道侧会通过tcp连接来返回对应的状态报告(及响应,非及时),接收到状态报告发送mq进行明细表进行更新(和校验后的topic相同)。

2.出现问题:

        测试环境压测200w短信发送,入库完成后一直堆积在mq中,导致发送非常缓慢,更新短信明细数据缓慢。

3.问题排查:

        尝试项目重启后很快更新明细的日志不打印并且触发本地队列的阈值,mq消费者卡住,发现cup飙升,mq消息堆积没办法取消息,尝试将本地队列的改大,发现达到阈值一样会出现。

        尝试将mq消费者这边多线程接,发现情况一样,但是看到阈值时触发的日志,发现使用的是主线程,而且update的时间很长,查看mysql服务,发现cup飙升,查询正在使用的表。

        SHOW OPEN TABLES WHERE In_use > 0;

发现扫到了未涉及的表(明细使用了shrading-jdbc。。。),仔细检查代码,发现update没有带分片字段。

4.解决

         手写了个xml,再次压测试发现挤压变少,调整阈值的逻辑,采用异步线程执行(防止主线程执行update导致mq消息挤压)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值