热门

最新

红包

立Flag

投票

同城

我的

发布
csdn4net
csdn4net
4 年前
truecsdn4net

每日小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项目实战案例
立即登录