怎么实现分布式消息事务的?半消息?

半消息是指生产者成功发送到Broker端的消息,但暂时不能被消费者消费的消息。它被标记为"暂不可投递"状态,只有在生产者执行完本地事务并进行二次确认后,消费者才能消费该消息。

使用半消息可以实现分布式消息事务,其中关键在于二次确认和消息回查的机制:

  1. 生产者向Broker发送半消息。
  2. 生产者收到响应,消息发送成功,此时消息处于半消息状态,标记为"不可投递",消费者无法消费。
  3. 生产者执行本地事务。
  4. 若本地事务正常执行完成,生产者向Broker发送Commit/Rollback消息。如果是Commit,Broker将半消息标记为正常消息,消费者可以消费;如果是Rollback,Broker将丢弃此消息。
  5. 若出现异常情况,Broker在一定时间后仍未收到二次确认。此时,Broker会查询所有半消息,并向生产者查询半消息的执行情况。
  6. 生产者查询本地事务的状态。
  7. 根据事务状态,将Commit/Rollback提交到Broker。(此过程为消息回查)
  8. 消费者在消费消息时执行本地事务。

标签: java, Java面试题, RocketMQ, Java问题合集, Java编程, Java问题精选, Java常见问题, RocketMQ面试题