RocketMQ使用心得1-消息发送
来源:互联网 发布:不动产静态投资 软件 编辑:程序博客网 时间:2024/04/26 07:45
去年末接触RocketMQ,主要因为官方标注消息必达,项目为支付相关,通过Restful api接收订单存库+推送MQ,再由消费端支付。后期发现即使消息必达,但消息不一定100%发送成功,那么如何判断消息发送成功又成为了一个坑。
消息发送结果SendStatus分4种SEND_OK、FLUSH_DISK_TIMEOUT、FLUSH_SLAVE_TIMEOUT、SLAVE_NOT_AVAILABLE,理论上如果broker配置同步落盘+同步双写,那么只有SEND_OK才能明确标识发送成功,其它状态为发送失败,但是实际上回执其它3种状态时消息都发送成功。因此改为如果消息发送无异常则认为消息发送成功,然而后期高并发测试中出现了消息发送异常,但是消费端接到了消息,尝试了2种解决方案,最终使用了方案2:
方案1:如果消息发送异常,则数据回滚,同时在消费端增加消息确认,比如订单是否入库,但是存在一个问题,有可能consumer消息接收速度比数据commit更快,那么就会出现消费端先判断数据不再数据库,而后数据才插入,因此方案1不论从性能还是逻辑上都比较差,pass。
方案2(推荐):api接收订单后入库,不论MQ消息是否发送成,都返回请求成功,无需回滚。增加监听程序,定时把超时未消费(即消息发送失败)的订单补发消息,这个方案相对好在发送消息使用默认配置也可以,可以不加大发消息重试次数和重试超时时长限制,以最快的速度接收订单+存库+推送消息。消息发送失败是比较极端情况,因此监听任务量不大而且执行逻辑非常简单,补发消息就是了。
建议不论使用什么MQ,消息吞吐量和消息必达的测试结果都是扯淡的,加上业务逻辑后就会出现各种各样的坑,如果希望确保消息必达或必发,那么方案2中的监听是一个必不可少的模块。
- RocketMQ使用心得1-消息发送
- rocketmq发送消息代码
- RocketMQ 发送消息疑问
- RocketMQ源码分析----发送消息
- rocketmq-producer之发送事物消息
- RocketMQ源码解析-Producer消息发送
- RocketMQ原理解析-producer 2.如何发送消息
- RocketMQ原理解析-producer 3.如何发送顺序消息
- RocketMQ原理解析-producer 4.发送分布式事物消息
- 【MQ】Eclipse向RocketMQ中发送和接收消息
- Kafka、RabbitMQ、RocketMQ发送小消息性能对比
- RocketMQ原理解析-producer 2.如何发送消息
- RocketMQ原理解析-producer 3.如何发送顺序消息
- RocketMQ原理解析-producer 4.发送分布式事物消息
- RocketMQ——Producer篇:发送普通消息
- RocketMQ——Producer篇:发送定时消息
- RocketMQ——Producer篇:发送顺序消息
- RocketMQ——Producer篇:发送事务消息
- 对swift新语言应用初步认识
- Activity与fragment之间的交互总结
- grep 、find、xargs使用方法
- Eclipse M2E 插件配置
- 欢迎使用CSDN-markdown编辑器
- RocketMQ使用心得1-消息发送
- 39 解决全志h3 linux内核源码里的关于script.fex的bug
- 懒人改善生活之
- Struts2实现上传文件
- MyEclipse Import 工程 UnknownFaceted Project Problem (Java Version Mismatch) 问题解决!
- Fastlane安装,实现自动化打包和发布
- JS表单验证-12个常用的JS表单验证
- 解决路径传参的乱码问题
- 注解