请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

本地消息表

老师 你课程里面提到 员工服务这边 插入员工信息和 往消息表插入到消息数据在同一个事务中,发送mq消息是要等这个事务提交之后再发送吗

正在回答 回答被采纳积分+3

1回答

Er十七 2023-12-03 17:13:58

同学,你好,是你理解的这样。为什么要等到本地消息入库才发送消息呢?第一个点,如果先发送消息,然后再保存本地消息,有可能消息发送出去了,但是本地消息插入失败了,这时候本地消息和业务数据在一个事务,那业务数据业务要回滚,但是消息发送出去就被消费了,所以会存在问题。第二个点,本地消息先入库,在发送消息,这样就算消息发送失败了,我们也可以根据本地消息表里面记录的信息发起消息的重试,保证最终消息的正确投递。

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_图_0 #1
    好的  谢谢老师  另外有个问题  课程讲到用rockerMq实现分布式事务   如果消费者消费失败了  对于rockerMq解决一致性的方案 是如何处理的呢?   是重试吗 ? 如果是重试的话  那么消费者一般是如何实现幂等性的呢?
    回复 有任何疑惑可以回复我~ 2023-12-03 18:37:21
  • Er十七 回复 提问者 qq_图_0 #2
    同学,消费者消费失败是需要重试消费的。消费者幂等性有多种实现方式。第一有一些消费场景是天然幂等的,比如消息只是触发消息,携带了实体id,告诉下游,实体数据有变化,下游接收到消息后,后续的业务操作都是利用消息中带的id重新调用接口实时查询做数据更新,这个时候无论消费多少次,数据查询的都是最新的,不会有影响。那更多的场景是重复消费有影响的。这种情况下,常用的解决方案就是唯一id,或者是数据库增加版本这种乐观锁的实现方式,防止数据的重复消费。还有一种就是使用redis来记录消费情况。
    回复 有任何疑惑可以回复我~ 2023-12-03 23:10:24
问题已解决,确定采纳
还有疑问,暂不采纳
Java主流分布式解决方案多场景设计与实战
  • 参与学习       131    人
  • 解答问题       34    个

本课程是一门关于分布式系统下常见的解决方案的课程

了解课程
意见反馈 帮助中心 APP下载
官方微信