RocketMQ 分布式事务消息过程分析
Half Message(半消息) 是指暂不能被Consumer消费的消息 。Producer 已经把消息成功发送到了 Broker 端,但此消息被标记为 暂不能投递 状态,处于该种状态下的消息称为半消息。需要 Producer 对消息的 二次确认 后,Consumer才能去消费它。 消息回查 由于网络闪段,生产者应用重启等原因。导致 Producer 端一直没有对 Half Message(半消息) 进行 二次确认 。这时 Brock 服务器会 定时扫描 长期处于半消息 的消息 ,会 主动询问 Producer 端 该消息的最终状态( Commit或者Rollback ),该消息即为 消息回查 。 A服务先发送个Half Message给Brock端,消息中携带 B服务 即将要+100元的信息。 当A服务知道Half Message发送成功后,那么开始第3步执行本地事务。 执行本地事务(会有三种情况1、执行成功。2、执行失败。3、网络等原因导致没有响应) 如果本地事务成功,那么 Product主动向 Brock服务器发送Commit,这样B服务就可以消费该message。 如果本地事务失败,那么 Product主动向 Brock服务器发送Rollback,那么就会直接删除上面这条半消息。 如果因为网络等原因迟迟没有返回失败还是成功,那么会执行RocketMQ的回调接口