手把手教你搭建高可用 RocketMQ 集群!

点击蓝色“架构文摘”关注我哟

加个“星标”,每天上午 09:25,干货推送!

来源:jack_xu | https://juejin.cn/post/6929500274457313293

RocketMQ发展历史

RocketMQ是一个由阿里巴巴开源的消息中间件,
2012年开源,2017年成为apache顶级项目。RocketMQ在阿里内部应用是非常广泛的,阿里内部的几千个应用都运行在RocketMQ之上,双十一期间需要处理亿万级别的消息,TPS可以达到几十万。目前支持Java、C/C++,Python、Go四种语言访问。

RocketMQ现在有两个版本,一个是社区开源版,一个是商业的云服务版(AliwareMQ)。最新版本:4.8.0(本文演示版本)。

它的核心设计借鉴了Kafka,所以我们在学习RocketMQ的时候,会发现很多和kafka相同的特性,但是在某些功能上和kafka又有较大的差异,它有以下一些特性:

  1. 支持集群模型、负载均衡、水平扩展能力

  2. 亿级别消息堆积能力

  3. 采用零拷贝的原理,顺序写盘,随机读

  4. 底层通信框架采用Netty NIO

  5. NameServer代替Zookeeper,实现服务寻址和服务协调

  6. 消息失败重试机制、消息可查询

  7. 强调集群无单点,可扩展,任意一点高可用,水平可扩展

  8. 经过多次双十一的考验

高可用架构

RocketMQ天生对集群的支持非常好,它有以下一些模式:

(1)单Master

优点:除了配置简单没什么优点

缺点:不可靠,该机器重启或者宕机,将要导致整个服务不可用

(2)多Master

优点:配置简单,性能最高

缺点:可能会有少量消息丢失(配置相关),单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性

(3)多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级

优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预

缺点:Master宕机或磁盘损坏时会有少量消息丢失

(4)多Master多Slave,每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功

优点:服务可用性与数据可用性非常高

缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主

本文采用的是二主二从安装模式,即第四种多Master多Slave

二主二从异步集群安装

端口规划

首先我买了两台云服务器,平时我会用来学习安装一些中间件,比较方便,大家有条件的话也可以买下,当然也可以通过在本地安装虚拟机的方式来操作。

接下来我要通过这两台服务器来实现二主二从的安装,首先对它们的端口进行一下规划

    第一台机器  42.192.77.73
    端口规划:
    9876     NameServer1
    10910    BrokerA-master
    10921    BrokerB-slave

    第二台机器  39.103.144.86
    端口规划:
    9876     NameServer2
    10920    BrokerB-master
    10911    BrokerA-slave
    复制代码

画图看上去更加清晰明了一些

下载

从官网  rocketmq.apache.org/  进去获得最新的下载地址,红框里标注出来的

这里的地址都可以,下载下来

    cd /jackxu
    wget https://mirror.bit.edu.cn/apache/rocketmq/4.8.0/rocketmq-all-4.8.0-bin-release.zip

下载好后解压,改个名字

    unzip rocketmq-all-4.8.0-bin-release.zip
    mv unzip rocketmq-all-4.8.0-bin-release.zip rocketmq

配置第一台机器

在两台机器上都下载、解压好。在rocketmq/conf目录下,有三种建议配置模式:

2m-2s-async(2主2从异步) —— 本文采用这种

2m-2s-sync (2主2从同步)

2m-noslave (2主)

现在需要修改两台机器上2m-2s-async这个目录中的文件。在42.192.77.73机器上修改broker-a.properties

    cd /jackxu/rocketmq/conf/2m-2s-async
    vim  broker-a.properties

修改集群名字

    brokerClusterName=jackxu-cluster

增加的内容

    #Broker 对外服务的监听端口
    listenPort=10910
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #nameServer地址,分号分割
    namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
    #存储路径
    storePathRootDir=/jackxu/rocketmq/store/broker-a
    #commitLog 存储路径
    storePathCommitLog=/jackxu/rocketmq/store/broker-a/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/jackxu/rocketmq/store/broker-a/consumequeue
    #消息索引存储路径
    storePathIndex=/jackxu/rocketmq/store/broker-a/index
    #checkpoint 文件存储路径
    storeCheckpoint=/jackxu/rocketmq/store/checkpoint
    #abort 文件存储路径
    abortFile=/jackxu/rocketmq/store/abort

修改broker-b-s.properties

    vim  broker-b-s.properties

修改集群名字

    brokerClusterName=jackxu-cluster

增加的内容

    #Broker 对外服务的监听端口
    listenPort=10921
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #nameServer地址,分号分割
    namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
    #存储路径
    storePathRootDir=/jackxu/rocketmq/store/broker-b-s
    #commitLog 存储路径
    storePathCommitLog=/jackxu/rocketmq/store/broker-b-s/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/jackxu/rocketmq/store/broker-b-s/consumequeue
    #消息索引存储路径
    storePathIndex=/jackxu/rocketmq/store/broker-b-s/index
    #checkpoint 文件存储路径
    storeCheckpoint=/jackxu/rocketmq/store/checkpoint
    #abort 文件存储路径
    abortFile=/jackxu/rocketmq/store/abort

配置第二台机器

在39.103.144.86机器上修改broker-b.properties

    cd /jackxu/rocketmq/conf/2m-2s-async
    vim  broker-b.properties

修改集群名字

    brokerClusterName=jackxu-cluster

增加的内容

    #Broker 对外服务的监听端口
    listenPort=10920
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #nameServer地址,分号分割
    namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
    #存储路径
    storePathRootDir=/jackxu/rocketmq/store/broker-b
    #commitLog 存储路径
    storePathCommitLog=/jackxu/rocketmq/store/broker-b/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/jackxu/rocketmq/store/broker-b/consumequeue
    #消息索引存储路径
    storePathIndex=/jackxu/rocketmq/store/broker-b/index
    #checkpoint 文件存储路径
    storeCheckpoint=/jackxu/rocketmq/store/checkpoint
    #abort 文件存储路径
    abortFile=/jackxu/rocketmq/store/abort

修改broker-a-s.properties

    vim  broker-a-s.properties

修改集群名字

    brokerClusterName=jackxu-cluster

增加的内容

    #Broker 对外服务的监听端口
    listenPort=10911
    #是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
    autoCreateTopicEnable=true
    #是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
    autoCreateSubscriptionGroup=true
    #nameServer地址,分号分割
    namesrvAddr=39.103.144.86:9876;42.192.77.73:9876
    #存储路径
    storePathRootDir=/jackxu/rocketmq/store/broker-a-s
    #commitLog 存储路径
    storePathCommitLog=/jackxu/rocketmq/store/broker-a-s/commitlog
    #消费队列存储路径存储路径
    storePathConsumeQueue=/jackxu/rocketmq/store/broker-a-s/consumequeue
    #消息索引存储路径
    storePathIndex=/jackxu/rocketmq/store/broker-a-s/index
    #checkpoint 文件存储路径
    storeCheckpoint=/jackxu/rocketmq/store/checkpoint
    #abort 文件存储路径
    abortFile=/jackxu/rocketmq/store/abort

创建数据目录

第一台机器42.192.77.73执行,只需要执行一次

    mkdir -p /jackxu/rocketmq/store/broker-a /jackxu/rocketmq/store/broker-a/consumequeue /jackxu/rocketmq/store/broker-a/commitlog /jackxu/rocketmq/store/broker-a/index /jackxu/rocketmq/logs /jackxu/rocketmq/store/broker-b-s /jackxu/rocketmq/store/broker-b-s/consumequeue /jackxu/rocketmq/store/broker-b-s/commitlog /jackxu/rocketmq/store/broker-b-s/index

第二台机器39.103.144.86执行,只需要执行一次

    mkdir -p /jackxu/rocketmq/store/broker-a-s /jackxu/rocketmq/store/broker-a-s/consumequeue /jackxu/rocketmq/store/broker-a-s/commitlog /jackxu/rocketmq/store/broker-a-s/index /jackxu/rocketmq/logs /jackxu/rocketmq/store/broker-b /jackxu/rocketmq/store/broker-b/consumequeue /jackxu/rocketmq/store/broker-b/commitlog /jackxu/rocketmq/store/broker-b/index

启动两个NameServer

在两台机器分别执行,& 表示在后台运行,默认情况下,nameserver监听的是9876端口

    nohup sh /jackxu/rocketmq/bin/mqnamesrv >/jackxu/rocketmq/logs/mqnamesrv.log 2>&1 &

查看日志

    tail -f /jackxu/rocketmq/logs/mqnamesrv.log

启动Broker

启动的时候按照下面的顺序来,-c 是指定broker的配置文件

1、启动73的A主

    nohup sh /jackxu/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-a.properties > /jackxu/rocketmq/logs/broker-a.log 2>&1 &

2、启动86的A从

    nohup sh /jackxu/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-a-s.properties > /jackxu/rocketmq/logs/broker-a-s.log 2>&1 &

3、启动86的B主

    nohup sh /jackxu/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-b.properties > /jackxu/rocketmq/logs/broker-b.log 2>&1 &

4、启动73的B从

    nohup sh /jackxu/rocketmq/bin/mqbroker -c /jackxu/rocketmq/conf/2m-2s-async/broker-b-s.properties > /jackxu/rocketmq/logs/broker-b-s.log 2>&1 &

查看日志

    tail -f /jackxu/rocketmq/conf/2m-2s-async/broker-a.properties
    tail -f /jackxu/rocketmq/conf/2m-2s-async/broker-a-s.properties
    tail -f /jackxu/rocketmq/conf/2m-2s-async/broker-b.properties
    tail -f /jackxu/rocketmq/conf/2m-2s-async/broker-b-s.properties

检查是否启动成功

输入jps命令,一共四个进程没问题

但是大多数情况下不会这么顺利,我在安装中有一些坑点:

1、没有安装jdk,因为这是我新的服务器,上面是没有jdk环境的,大家知道rocketmq是用java写的,所以需要有java环境才能运行,包括jps命令就是查看java进程

2、内存不足,因为默认的配置文件设置了很大的内存,但是我的机器只有1核2G,肯定是不够的,所以在启动的时候会报内存不足

解决办法就是修改配置文件

    vim /jackxu/rocketmq/bin/runserver.sh
    vim /jackxu/rocketmq/bin/runbroker.sh

把NameServer和Broker的内存大小都改小一点,然后重新启动即可

关闭命令

停止服务的时候需要注意,要先停止broker,其次停止nameserver。

    cd /jackxu/rocketmq/bin

    sh mqshutdown namesrv
    sh mqshutdown broker
    复制代码

web控制台安装

与kafka不同的是,rocket官方提供了一个可视化控制台,大家可以在这里下载

https://github.com/apache/rocketmq-externals

这个是rocketmq的扩展,里面不仅包含控制台的扩展,也包含对大数据flume、hbase等组件的对接和扩展。

下载

下载源码,一般下载速度会比较慢,等不及的话可以去网盘下载链接:

https://pan.baidu.com/s/1-eg5JK8Te9uVAwADZeO_Dw
提取码:jack

    cd /jackxu
    wget https://github.com/apache/rocketmq-externals/archive/master.zip

解压

    unzip master.zip

修改配置文件

    cd /jackxu/rocketmq-externals-master/rocketmq-console/src/main/resources
    vim application.properties

这是一个spring boot项目,我们需要修改里面的参数

    //修改端口号:
    server.port=7298
    //修改name server地址(多个地址用英文分号隔开)
    rocketmq.config.namesrvAddr=39.103.144.86:9876;42.192.77.73:9876

打包

打成一个jar包, 这里需要先安装maven,编译慢的话可以替换成淘宝的镜像

    cd /jackxu/rocketmq-externals-master/rocketmq-console
    mvn clean package -Dmaven.test.skip=true

启动jar包

    cd target
    java -jar rocketmq-console-ng-2.0.0.jar

访问

访问一下  http://42.192.77.73:7298/  ,可以看到都已经启动成功了

踩坑点

这里有两个踩坑点,在启动的时候会报错

(1)spring
boot启动的时候报连接不上39.103.144.86:9876;42.192.77.73:9876,这里我的第一反应是防火墙的原因,关闭一下

    systemctl disable firewalld.service 

再次启动还是不行,然后我的第二个反应是端口没有开放,telnet一下

    telnet 42.192.77.73 9876

果然telnet不通,原因是这样的,我安装在云服务器上,默认端口是不开放的,需要到控制台打开,这也算是一个经验吧。

(2)再次启动的时候又报了另一个错误,连接不上172.26.182.88:9876,当时我就奇怪了,我写的地址里没有这个地址啊,怎么在连接它,而且这个IP看上去又像是内网地址,后来我打开阿里云控制台一看,果真是这台机器的内网地址,然后我又百度了一番,大概原因就是RocketMQ是阿里开源的,而那台机器又是阿里云的机器,它的源码里应该是优先连接到阿里云的内网地址,网上的做法是在配置文件里面显式的加上公网地址即可解决。

    #新增公网IP
    brokerIP1=39.103.144.86

控制台介绍

  • 运维:主要是设置nameserver和配置vipchannel。

  • 驾驶舱:控制台的dashboard,可以分别按broker和主题来查看消息的数量和趋势。

  • 集群:整个RocketMQ的集群情况,包括分片,编号,地址,版本,消息生产和消息消费的TPS等,这个在做性能测试的时候可以作为数据指标。

  • 主题:即topic,可以新增/更新topic,也可以查看topic的信息,如状态,路由,消费者管理和发送消息等。

  • 消费者:可以在当前broker中查看/新建消费者group,包括消费者信息和消费进度。

  • 生产者:可以在当前broker中查看生产组下的生产者group,包括生产者信息和生产者状态。

  • 消息:可以按照topic,messageID,messageKey分别查询具体的消息。

  • 用户中心:切换语言和登录相关(登录需要在console的配置中打开对应配置,默认不需要登录)。

其中最常用的是集群,主题,消费者和消息这四部分。

配置文件说明

下面介绍一下安装RocketMQ配置文件里面的属性首先是集群名字相同,上面四台机器的集群名字都叫 brokerClusterName=jackxu-cluster,其次是连接到相同的NameServer,namesrvAddr=39.103.144.86:9876;42.192.77.73:9876。在配置文件中brokerId=0代表master,brokerId=1代表slave。

在配置文件中还有这两个属性

brokerRole在master broker可以配置成SYNC_MASTER或者ASYNC_MASTER,在slave broker统一配置成SLAVE

说明含义
ASYNC_MASTER主从异步复制master写成功,返回客户端成功。拥有较低的延迟和较高的吞吐量,但是当master出现故障以后,有可能造成数据丢失。
SYNC_MASTER主从同步双写(推荐)master和slave均写成功,才返回客户端成功。master挂了以后可以保证数据不丢失,但是同步复制会增加数据写入延迟,降低吞吐量。

flushDiskType分为ASYNC_FLUSH和SYNC_FLUSH

说明含义
ASYNC_FLUSH异步刷盘(默认)生产者发送的每一条消息并不是立即保存到磁盘,而是暂时缓存起来,然后就返回生产者成功。随后再异步的将缓存数据保存到磁盘,有两种情况:1是定期将缓存中更新的数据进行刷盘,2是当缓存中更新的数据条数达到某一设定值后进行刷盘。这种方式会存在消息丢失(在还未来得及同步到磁盘的时候宕机),但是性能很好。默认是这种模式。
SYNC_FLUSH同步刷盘生产者发送的每一条消息都在保存到磁盘成功后才返回告诉生产者成功。这种方式不会存在消息丢失的问题,但是有很大的磁盘IO开销,性能有一定影响。

流程图

我们推荐的配置是异步刷盘+同步复制。

HA与故障转移

在之前的版本中,RocketMQ只有master/slave一种部署方式,一组broker中有一个master,有0到多个slave,这种模式下提供了一定的高可用性。

master在挂了的情况下,slave仍然可以提供读服务。默认情况下,读写都在master上,如果开启了slaveReadEnable=true,slave也可以参与读负载,但是是在master积压的消息超过了物理内存的40%,才会默认转向brokerId为1的从服务器读取,具体转向哪台机器由whichBrokerWhenConsumeSlowly参数控制。

    org.apache.rocketmq.common.subscription.SubscriptionGroupConfig
private long whichBrokerWhenConsumeSlowly=1;

由于是多主的存在,当一个master挂了以后,可以写到其他的master上。

RocketMQ 2019年3月发布的4.5.0版本中,利用Dledger技术解决了自动选主的问题。Dledger就是一个基于raft协议的commitlog存储库,也是RocketMQ实现新的高可用多副本架构的关键。它的优点是不需要引入外部组件,自动选主逻辑集成到各个节点的进程中,节点之间通过通信就可以完成选主。

架构图

在这种情况下,commitlog是Dledger管理的,具有选主的功能。默认是不开启,如果需要开启,需要在配置文件里面添加以下配置:

    # 是否启用DLedger
    enableDLegerCommitLog=true
    # DLedger Raft Group的名字
    dLegerGroup=broker-a
    # DLedger Group内各节点的地址和端口,至少需要3个节点
    dLegerPeers=n0-192.168.44.163:10911;n1-192.168.44.164:10911;n2-192.168.44.165:10911
    # 本节点id
    dLegerSelfId=n0

结语

小伙伴在学习一个中间件的时候一定要动手实践安装,首先是体验一下安装的过程氛围,了解一些参数配置,在公司里这个操作一般是由运维来完成的,虽然我们平时接触不到,但是学习还是需要的,不一定需要精,至少是要会;其次是为后面的写代码做实验做准备,发消息消费消息总得有个地方吧,这也是RocketMQ的第一篇,后面我还会介绍其使用方法及原理,大家敬请期待…

end

推荐阅读:

如有收获,点个在看,诚挚感谢

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 扫一扫,分享海报

<p style="font-size:14px;color:#333333;"> <span style="color:#000000;">RocketMQ </span><span style="color:#000000;">是阿里巴巴在</span><span style="color:#000000;">2012</span><span style="color:#000000;">年开源的分布式消息中间件,目前已经捐赠给</span><span style="color:#000000;"> Apache </span><span style="color:#000000;">软件基金会,并于</span><span style="color:#000000;">2017</span><span style="color:#000000;">年</span><span style="color:#000000;">9</span><span style="color:#000000;">月</span><span style="color:#000000;">25</span><span style="color:#000000;">日成为</span><span style="color:#000000;">Apache </span><span style="color:#000000;">的顶级项目。作为经历过多次阿里巴巴双十一这种</span><span style="color:#000000;">“</span><span style="color:#000000;">超级工程</span><span style="color:#000000;">”</span><span style="color:#000000;">的洗礼并有稳定出色表现的国产中间件,以其性能、低延时和可靠等特性近年来已经也被越来越多的国内企业使用。其主要功能有</span><span style="color:#000000;">1.</span><span style="color:#000000;">灵活可扩展性、</span><span style="color:#000000;">2.</span><span style="color:#000000;">海量消息堆积能力、</span><span style="color:#000000;">3.</span><span style="color:#000000;">支持顺序消息、</span><span style="color:#000000;">4.</span><span style="color:#000000;">多种消息过滤方式、</span><span style="color:#000000;">5.</span><span style="color:#000000;">支持事务消息、</span><span style="color:#000000;">6.</span><span style="color:#000000;">回溯消费等常用功能。</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">RocketMQ <span>核心的四组件:</span>Name Server<span>、</span>Broker<span>、</span>Producer<span>、</span>Consumer <span>,每个组件都可以部署成集群进行水平扩展。</span></span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="color:#000000;">2、适应人群</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">有一定的Java基础,并且有分布式项目开发经验。</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="color:#000000;">3、课程价值</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">可以让初学者对分布式系统解耦有一定认识,并且能够通过快速使用RocketMQ实现分布式服务的异步通信,同时本课程还会通过项目案例实战让学员对RocketMQ的应用场景有所体会,最后再通过源码角度让学员对RocketMQ的原理有所理解,不仅做到“知其然”,亦“知其所以然”。</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="color:#000000;">4、课程收获</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">1. <span style="font-size:14px;">理解消息中间件MQ的优势和应用场景</span></span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">2. 掌握RocketMQ的核心功能,以及各种消息发送案例</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">3. 通过电商项目深刻理解RocketMQ在使用项目中的落地应用</span> </p> <p style="font-size:14px;color:#333333;"> <span style="color:#000000;">4. 通过RocketMQ级功能和源码学习,对RocketMQ的技术细节和原理有更加透彻的理解</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span>5、课程亮点</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span>l<span style="font-size:9px;">  </span></span><span style="font-size:17px;">核心功能</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>MQ介绍</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>环境准备</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>RocketMQ高可用集群搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>各种消息发送样例</span> </p> <p style="font-size:14px;color:#333333;"> <span>l<span style="font-size:9px;">  </span></span><span>综合练习</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>项目背景介绍</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>功能分析</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>项目环境搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>下单功能,保证各服务的数据一致性</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>确认订单功能,通过消息进行数据分发</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>整体联调</span> </p> <p style="font-size:14px;color:#333333;"> <span>l<span style="font-size:9px;">  </span></span><span>级功能</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息的存储和发送</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息存储结构</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>刷盘机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息的同步复制和异步复制</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>负载均衡</span> </p> <p style="font-size:14px;color:#333333;"> <span>l<span style="font-size:9px;">  </span></span><span>源码分析</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>路由中心NameServer</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息生产者Producer</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息存储</span> </p> <p style="font-size:14px;color:#333333;"> <span>n<span style="font-size:9px;">  </span></span><span>消息消费Consumer</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span>6、主讲内容</span></strong> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="font-size:19px;">章节一:核心功能</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span>1.<span style="font-size:9px;">     </span>快速入门</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>MQ介绍</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>作用</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>注意事项</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>各MQ产品比较</span> </p> <p style="font-size:14px;color:#333333;"> <span>2.<span style="font-size:9px;">     </span>RocketMQ环境搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>环境准备</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>安装RocketMQ</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>启动RocketMQ</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>测试RocketMQ</span> </p> <p style="font-size:14px;color:#333333;"> <span>e)<span style="font-size:9px;">     </span>关闭RocketMQ</span> </p> <p style="font-size:14px;color:#333333;"> <span>3.<span style="font-size:9px;">     </span>RocketMQ高可用集群搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>集群各角色介绍</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>集群搭建方式</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>双主双从集群搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>集群监控平台</span> </p> <p style="font-size:14px;color:#333333;"> <span>4.<span style="font-size:9px;">     </span>各种消息发送样例</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>同步消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>异步消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>单向消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>顺序消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>e)<span style="font-size:9px;">     </span>批量消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>f)<span style="font-size:9px;">      </span>过滤消息</span> </p> <p style="font-size:14px;color:#333333;"> <span>g)<span style="font-size:9px;">     </span>事务消息</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="font-size:19px;">章节二:项目实战</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span>1.<span style="font-size:9px;">    </span>项目背景介绍</span> </p> <p style="font-size:14px;color:#333333;"> <span>(1)<span style="font-size:9px;">    </span>电商高可用MQ实战</span> </p> <p style="font-size:14px;color:#333333;"> <span>2.<span style="font-size:9px;">    </span>功能分析</span> </p> <p style="font-size:14px;color:#333333;"> <span>(1)<span style="font-size:9px;">    </span>下单功能</span> </p> <p style="font-size:14px;color:#333333;"> <span>(2)<span style="font-size:9px;">    </span>支付功能</span> </p> <p style="font-size:14px;color:#333333;"> <span>3.<span style="font-size:9px;">    </span>项目环境搭建</span> </p> <p style="font-size:14px;color:#333333;"> <span>(1)<span style="font-size:9px;">    </span>SpringBoot</span> </p> <p style="font-size:14px;color:#333333;"> <span>(2)<span style="font-size:9px;">    </span>Dubbo</span> </p> <p style="font-size:14px;color:#333333;"> <span>(3)<span style="font-size:9px;">    </span>Zookeeper</span> </p> <p style="font-size:14px;color:#333333;"> <span>(4)<span style="font-size:9px;">    </span>RocketMQ</span> </p> <p style="font-size:14px;color:#333333;"> <span>(5)<span style="font-size:9px;">    </span>Mysql</span> </p> <p style="font-size:14px;color:#333333;"> <span>4.下单功能,保证各服务的数据一致性</span> </p> <p style="font-size:14px;color:#333333;"> <span>5.确认订单功能,通过消息进行数据分发</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="font-size:19px;">章节三:级功能</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span>1. 消息的存储和发送</span> </p> <p style="font-size:14px;color:#333333;"> <span>2. 消息存储结构</span> </p> <p style="font-size:14px;color:#333333;"> <span>3. 刷盘机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>(1)<span style="font-size:9px;">    </span>同步刷盘</span> </p> <p style="font-size:14px;color:#333333;"> <span>(2)<span style="font-size:9px;">    </span>异步刷盘</span> </p> <p style="font-size:14px;color:#333333;"> <span>4. 消息的同步复制和异步复制</span> </p> <p style="font-size:14px;color:#333333;"> <span>5. 负载均衡</span> </p> <p style="font-size:14px;color:#333333;"> <span>(1)<span style="font-size:9px;">    </span>Producer负载均衡</span> </p> <p style="font-size:14px;color:#333333;"> <span>(2)<span style="font-size:9px;">    </span>Consumer负载均衡</span> </p> <p style="font-size:14px;color:#333333;"> <strong><span style="font-size:19px;">章节四:源码分析</span></strong> </p> <p style="font-size:14px;color:#333333;"> <span>1.<span style="font-size:9px;">     </span>路由中心NameServer</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>NameServer架构设计</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>NameServer启动流程</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>NameServer路由注册和故障剔除</span> </p> <p style="font-size:14px;color:#333333;"> <span>2.<span style="font-size:9px;">     </span>消息生产者Producer</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>生产者启动流程</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>生产者发送消息流程</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>批量发送</span> </p> <p style="font-size:14px;color:#333333;"> <span>3.<span style="font-size:9px;">     </span>消息存储</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>消息存储流程</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>存储文件与内存映射</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>存储文件</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>实时更新消息消费队列和存储文件</span> </p> <p style="font-size:14px;color:#333333;"> <span>e)<span style="font-size:9px;">     </span>消息队列与索引文件恢复</span> </p> <p style="font-size:14px;color:#333333;"> <span>f)<span style="font-size:9px;">      </span>刷盘机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>4.<span style="font-size:9px;">     </span></span><span>过期文件删除机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>a)<span style="font-size:9px;">     </span>消息消费Consumer</span> </p> <p style="font-size:14px;color:#333333;"> <span>b)<span style="font-size:9px;">     </span>消费者启动流程</span> </p> <p style="font-size:14px;color:#333333;"> <span>c)<span style="font-size:9px;">      </span>消息拉取</span> </p> <p style="font-size:14px;color:#333333;"> <span>d)<span style="font-size:9px;">     </span>消息队列负载均衡和重新分布机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>e)<span style="font-size:9px;">     </span>消息消费过程</span> </p> <p style="font-size:14px;color:#333333;"> <span>f)<span style="font-size:9px;">      </span>定时消息机制</span> </p> <p style="font-size:14px;color:#333333;"> <span>g)<span style="font-size:9px;">     </span>顺序消息</span> </p>
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值