什么是事务性消息(transactional message)?
可以认为是一个确保分布式系统中的最终一致性的两阶段提交(two-phase commit )的消息实现。
事务性消息确保本地事务的执行和消息的发送是一个原子性操作。
关于two-phase commit:https://blog.youkuaiyun.com/lengxiao1993/article/details/88290514
rocketmq事务消息是发生在Producer和Broker之间,是二阶段提交。
生产者,第一个阶段确保消息发送成功了;
第二个阶段执行本地操作,根据本地操作的执行结果来决定发送的那条消息是否需要消费或回滚。
使用限制
- 事务性消息不支持定时和批处理
- 为了避免单个消息被check多次从而引起大部分队列消息的堆积,我们限制单个消息的check次数默认为15次,用户可以通过配置
transactionCheckMax
参数更改。如果一个消息checked超过了“transactionCheckMax”,这个消息就会被丢弃,同时默认打印一条error log。用户可以通过重写AbstractTr