本地消息表

来源:11-23 【分布式事务解决方案四】-本地消息表实现分布式事务

qq_图_0

2023-12-03

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

写回答

1回答

Er十七

2023-12-03

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

0
2
Er十七
回复
qq_图_0
同学,消费者消费失败是需要重试消费的。消费者幂等性有多种实现方式。第一有一些消费场景是天然幂等的,比如消息只是触发消息,携带了实体id,告诉下游,实体数据有变化,下游接收到消息后,后续的业务操作都是利用消息中带的id重新调用接口实时查询做数据更新,这个时候无论消费多少次,数据查询的都是最新的,不会有影响。那更多的场景是重复消费有影响的。这种情况下,常用的解决方案就是唯一id,或者是数据库增加版本这种乐观锁的实现方式,防止数据的重复消费。还有一种就是使用redis来记录消费情况。
2023-12-03
共2条回复

Java主流分布式解决方案多场景设计与实战

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

178 学习 · 49 问题

查看课程