分布式事务 - 969251639/study GitHub Wiki

项目中的分布式事务用了两种方式,一种是通过LCN框架实现的强一致方案,一种是通过可靠消息实现的最终一致性的异步方案

  1. LCN:
    国内的分布式事务框架:https://github.com/codingapi/tx-lcn
    实现的思路和使用方法也比较简单,最新版本已经支持了txc,lcn,tcc三种方式,具体的使用可以上面github说明

  2. 可靠消息:
    通过可靠消息,事务发起者通过消息机制将所有关联的业务串联起来,这种方法是不支持回滚,所以必须要求消息的可靠性

实现具体可参考以下实现
https://github.com/969251639/study/wiki/%E6%B6%88%E6%81%AF%E5%8F%AF%E9%9D%A0%E4%BC%A0%E8%BE%93

在业务方法中如下使用

@Service
public class TestServiceImpl implements TestService {
	@Autowired
	private MessageService messageService;
	
	@Override
	@Transactional
	public void test() {
		//执行本地业务方法
		Message message = new Message("目的地", "参数json", 1,"描述,可为空");
		messageService.insert(message);
		//继续执行本地业务方法
	}
}

然后消费者服务自动去消费它即可

@Component
public class TestConsumer {
    ...
    @JmsListener(destination = "xxx")
    public void receiveQueue(String msg) {
        T t = JsonUtils.fromJson(msg, T.class);
        //do something
    }
}

这样通过消息中间件就将多个服务的事务分散到各自的本地事务中去保证