zoukankan      html  css  js  c++  java
  • 消息中间件---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。

  • 相关阅读:
    2017 ICPC沈阳站L
    (POJ 1990)Mowfest(确定不再来一发树状数组么?)
    (POJ 3067) Japan (慢慢熟悉的树状数组)
    (POJ 2549)Sumsets(折半枚举)
    图的高siao存储结构——链式前向星
    (HDU1317)XYZZY(Floyd+spfa)
    (POJ1182)食物链(带权并查集-附通用模板)
    (HDU 1231)最大连续子序列
    (HDU 1598) find the most comfortable road (并查集+最小生成树)
    Problem: The World Final II(NEUOJ1175)排序+动态规划
  • 原文地址:https://www.cnblogs.com/lq-93/p/12674849.html
Copyright © 2011-2022 走看看