在之前的一个xxgs,分布式消息的发送,事务的最终一致性靠落表实现,里面用到了rabbitmq,

TransactionSynchronizationManager.registerSynchronization     这个是和treadlocal有关的

当我们有业务需要在事务提交过后进行某一项或者某一系列的业务操作时候我们就可以使用TransactionSynchronizationManager
而这里对他的使用,是在发出一个消息的时候,通过这个
TransactionSynchronizationManager.registerSynchronization(beforeTxCommitAdapter);  实现rabbitmq消息不会被重复消费,用一个专门的表维护发出去的事件,表由主键id
,引用id(表示的事件枚举类型),业务引用id,时间戳。每次发事件前会先被这个insert进表,然后发出事件,
通过数据库的自增保证
https://www.cnblogs.com/jack1995/p/10908805.html
实际来说保证幂等性就是保证消息不重复消费,
https://www.cnblogs.com/leaveast/p/11765503.html 使用动态代理的方式创建代理对象。
@EnableTransactionManagement

public final static String TRANSACTION_MANAGER_DATA = "transactionManagerRrqa";
@Transactional(value = ConfigInFile.TRANSACTION_MANAGER_DATA)
@Bean(name = TX_MANAGER)DataSourceTransactionManager

Spring采用了AOP和ThreadLocal的方式来解决DAO层事务控制语句与业务层代码耦合的问题。https://blog.csdn.net/weixin_44366439/article/details/90381619

https://blog.csdn.net/weixin_44366439/article/details/90381619值得好好研究