事务消息就是MQ提供的类似XA的分布式事务能力,通过事务消息可以达到分布式事务的最终一致性。

    半事务消息就是MQ收到了生产者的消息,但是没有收到二次确认,不能投递的消息。

    实现原理如下:

    1. 生产者先发送一条半事务消息到MQ
    2. MQ收到消息后返回ack确认
    3. 生产者开始执行本地事务
    4. 如果事务执行成功发送commit到MQ,失败发送rollback
    5. 如果MQ长时间未收到生产者的二次确认commit或者rollback,MQ对生产者发起消息回查
    6. 生产者查询事务执行最终状态
    7. 根据查询事务状态再次提交二次确认

    最终,如果MQ收到二次确认commit,就可以把消息投递给消费者,反之如果是rollback,消息会保存下来并且在3天后被删除。

    image.png