消息中间件---RocketMQ

1.RocketMQ的原理与架构:

 一.作为消息中间件的架构图:(摘自RocketMQ官网)

   官网地址:http://rocketmq.apache.org/docs/quick-start/

 架构原理:

 说明:NameServer类似于注册中心概念(相当于kafka的zk),但是这个跟zk有点 不同的是:zk是中心化的,而nameserver是去去中心化

1.启动nameserver之后,会去监听端口,等待broker、consumer、producer进行连接

2.broker启动之后,会跟所有的nameserver建立长连接,并定时的发送心跳,心跳包中包含着broker的ip、端口以及topic消息(检测当前broker是否可用),注册成功之后,nameserver包含了broker与topic的映射关系。

3.消息发送:producer启动时,跟某一台的nameserver保持长连接,并从nameserver中获取当前topic存在的与之对应的broker信息,然后跟broker建立长连接,发送消息(topic可以事先创建,或者发送时如果当前topic不存在,则会自动创建)

4.消息消费:消息消费过程其实跟发送过程类似,都是通过跟nameserver建立连接,然后通过topic找到相对应的broker建立长连接,然后开始消费消息.

二、RocketMQ作为解决分布式事务的架构与原理图:

1.架构图:

2.RocketMQ实现事务消息主要分为两个阶段:正常事务的发送及提交、事务信息的补偿流程 整体流程为:

1)正常事务的发送及提交:

      ①.发送方首先户发送一个半消息发送到broker当中,标识该消息是不能够被消费的,同时需要实现RocketMQLocalTransactionListener接口

      ②.broker接收到消息之后,然后发送方会执行一个Listener方法中的本地事物方法(executeLocalTransaction),根据本地事物的执行状态执行commit、rollback

  ③.broker收到本地提交的状态值之后,将消息标识成可以消费,然后消息者进行消费

2).如果broker长时间未收到本地事务状态(事务的一个补偿)--解决生产者在发送Commit或者Rollback操作时发生超时或失败的情况。

      ①.如果broker未收到,broker会向发送一个确定回查的接口checkLocalTransaction确定回查的操作请求

   ②.生产者接收到回查消息之后,检查本地事务的一个状态;

   ③.根据本地事务的检查接口执行Commit、rollback、unknow。

猜你喜欢

转载自www.cnblogs.com/lq-93/p/12674849.html