48.rocketMQ

一、简介

  RocketMQ是阿里旗下的一款产品,分为开源版本和非开源版本。相比于ActiveMQ,RocketMQ支持顺序消费、事务机制、失败重试机制、消息可查询、消息订阅、较强的水平扩展能力、亿级堆积能力以及友好的消息拉取模式。RocketMQ的开源社区比较活跃,经受过双十二的考验。(架构师杨正坤:oceanBase)

  在这里,我们用nameServer来替代zookeeper,nameServer不遵循JMS,有一些ActiveMQ中没有涉及到的专业术语需要了解一下:

  • push consumer
  • pull consumer
  • producer group 一类producter的集合
  • consumer group 一类consumer名称
  • broker:消息中转
  • 广播消息
  • 发布订阅模式:RocketMQ中只有这一种模式,只是有基于一个还是多个之说
  • 集群消息
  • message Filter:java代码上传
  • message persistence:仅支持kafka和RocketMQ这两种持久化
  • RocketMQ是无界的
  • 带有消息过滤

producer group 和 customer group

 

 

rocketMQ原理图

二、搭建

2.1 几种模式

  1. 单master(基本不用)
  2. 多master多slave(不常用)
  3. 多master模式(常用,大部分场景可以满足)
  4. 异步复制:向master发送成功就返回给应用表名成功
  5. 同步双写:数据和服务都无单点,可靠性很高,向master和slave都发送成功才告诉应用成功

2.2 步骤

  1. host配置
  2. 上传解压rocketmq压缩包
  3. 创建两台机器的存储路径
    ../store
    ../store/comitlog
    ../store/consumequeue
    ../sotre/index
  4. 修改 broker-a.properties <-- master1
           broker-b.properties <-- master2
    可清掉默认配置
    brokerClusterName都一样
    brokerName=broker-a
    brokerId=0表示master
  5. 修改日志文件
  6. 修改启动参数(JVM调优)
    runbroker.sh 最小堆是1g
    runserver.sh

 四、聊一聊disruptor的全局事务和rocket的分布式事务

有人说disruptor能够实现分布式事务,实际上disruptor能够支持的那不叫分布式事务,而是叫全局事务。

 

p1生产数据给c1和c2,c1和c2都的执行结果给c3,c3看看c1和c2是不是都执行成功了,有一个执行不成功就回滚

真正的分布式事务应该是什么样的呢?

 

 

应该是ctrl指挥p生产数据,p生产完就完全不管这部分数据了,立即向ctrl报告。而mq拿到数据后就发送给订阅者,不管这期间发生回滚、重试神马,都在mq和c之间进行,而不会影响到前面的操作。也就是像图中那样,这一套系统被分成完全独立的两块,不相互影响。

五、mq架构

 

posted on 2017-04-06 21:32  司广孟  阅读(757)  评论(0编辑  收藏  举报

导航