热门
最新
红包
立Flag
投票
同城
我的
发布
每日小tip(二)
问题: 对于mq消息的可靠投递,互联网公司的真实落地方案是怎样的.
思路: mq消息的可靠性,主要分为3个方面
(1)生产者的可靠投递(难点)
(2)集群的持久化
(3)消费者的消费确认
解决方案(对于难点):结合事务
(1)代码实现:将发送mq的代码放在事务的最后一句
原理: 数据执行出现异常,事务自动回滚,所以不会发送mq;
mq出现异常,事务回滚,从而数据不会出现异常
缺点: 如果需要发送多条mq,即不同情况对应不同的mq,那就不能用上述
方案了
(2)消息入库,并且事务提交后再发送消息.
原理:a.将消息存入数据库中,并将对应的ID放入threadlocal中
b.事务提交后,查询threadlocal中待发送消息ID,将消息发送,并删除
c.如果消息发送失败,通过定时任务再次发送,达到最终一致性.
注意:方案二中,需要对事务管理器的重写
思考: (1)threadlocal很眼熟,有什么用,原理是什么
(2)为什么不使用mq提供的事务消息
参考:https://github.com/eetig/rocketmq-example
CSDN App 扫码分享
评论
1
打赏
- 复制链接
- 举报
下一条:
autoscraper项目实战案例