在Mq中,由于消息从producer发送出去到最终被消费者消费,中间需要经过mq的服务器进行中转,在rocketMq中即为broker,rabbitmq中为exchange,意思差不多,这样一来消息的投递就有了不确定性,因此在rocketMq中,引入了事务性消息这一概念;
1、RocketMq事务消息是保证事务的最终一致性;
2、半消息,producer消息投递出去了,到达了broker,但是broker未能找到合适的queue,即找到能够消费消息的消费者,这时producer端就无法获得broker对该消息的二次确认,这时候broker会将该消息标记为“暂时不能投递”的状态,即该消息处于半消息状态;
3、消息回查,由于某些特殊原因,如网络抖动,生产者应用重启,可能导致某条消息的二次确认丢失,而broker会不定时的扫描某条长期处于半消息状态的消息,此时会主动向生产者发送询问该条消息的最终状态,(commit或者rollBack),即对该消息进行回查,这个是broker自动为我们做的,默认时间间隔是1分钟,可通过在broker.conf文件中设置 transactionCheckInterval 的值来改变默认值,单位为毫秒