RocketMQ事务消息模型原理
rocketmq事务消息模型执行逻辑:
①生产者发送一个事务消息到消息队列上,消息队列只记录这条消息的数据,此时消费者无法消费这条消息。
②生产者执行具体的业务逻辑,完成本地事务操作。
③接着生产者根据本地事务的执行结果发送一条确认消息给消息队列服务器,如果本地事务执行成功,则发送一个commit消息,表示在第一步中的消息可以被消费,否则,消息队列服务器会把第一步中的消息删除。
④如果生产者在执行本地事务的过程中因为某些情况一直未给消息队列服务器发送确认,那么消息队列服务器会定时主动会查生产者获取事务的执行结果,然后根据回查结果来决定这条消息是否需要投递给消费者。
⑤消息队列服务器上存储的消息被生产者确认之后,消费者就可以消费这条消息,消息消费完成之后发送一个确认标识给消息队列服务器,表示该消息投递成功。
在RocketMq事务消息模型中,事务是由生产者来完成的,消费者不需要考虑,因为消息队列可靠性投递机制的存在,如果消费者没有签到该消息,那么消息队里服务器会重复投递,从而实现生产者本地数据和消费者本地数据在消息队列的机制下达到最终一致。
rocketMq的核心机制是事务回查机制,这种查询模式在很多类似的场景中都可以应用,在分布式系统中,由于网络通信的存在,服务之间的远程通信除成功和失败两种结果外,还存在一种未知状态,比如网络超时。服务提供者可以提供一个查询接口向外输出操作的执行状态,服务调用方可以通过调用该接口得知之前的操作的结果并进行相应的处理。