RocketMQ 1 (介绍、安装、测试、搭建集群)

1、RocketMQ 初识

RocketMQ 与spring cloud的整合 参考:https://blog.csdn.net/a__int__/article/details/109848085

1.1、MQ介绍

什么是MQ:(Message Queue)消息队列,“先进先出”的一种数据结构。用来解决程序解耦、异步消息,流量削峰等问题。

主要的MQ产品包括:RabbitMQ、ActiveMQ、RocketMQ、ZeroMQ、Kafka、IBM WebSphere 等。

MQ缺点:
1、对于小系统来说,系统可用性降低,一旦MQ宕机业务就会受到影响。
2、加上MQ系统复杂度提高,以前系统是同步调用,现在是异步调用。
3、一致性问题:MQ连接的几个系统中,其中一个坏掉了,其他几个的一致性就不能得到保证了。

1.2、安装与运行

1.2.1、运行前准备

安装前准备:Linux 环境、jdk1.8(64位)。
RabbitMQ下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq

有bin和source,这里下载bin

接下来解压下载好的文件,然后将它移动到/usr/local/rocketmq/下面

unzip rocketmq-all-4.8.0-bin-release.zip                             // 解压
sudo mv rocketmq-all-4.8.0-bin-release /usr/local/rocketmq/          // 移动位置

RocketMQ里面默认配置的java内存比较大,需要我们修改一下

// 在 /usr/local/rocketmq/bin 目录下
sudo vim runserver.sh
sudo vim runbroker.sh 

修改两个文件里面的 JAVA_OPT="${JAVA_OPT} -server …" 后面的数字
可根据机器自身内存大小改,例如把8g改成256m,4g改成120m

1.2.2、运行与测试

启动NameServer、Broker

// 在 /usr/local/rocketmq/bin 目录下
nohup sh mqnamesrv &
nohup sh mqbroker -n localhost:9876 &

如果成功运行,你可以:

// 查看nohup生成的nohup.out
cat nohup.out
// 查看正在运行的java程序
jps
// 查看它们的启动日志文件
tail -f ~/logs/rocketmqlogs/namesrv.log               
tail -f ~/logs/rocketmqlogs/broker.log  

// 测试消息发送、接收 (rocketmq目录下执行)
// 新开一个窗口用demo测试发送
export NAMESRV_ADDR=localhost:9876                                   # 1、设置环境变量
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer      # 2、使用demo发送消息
// 新开一个窗口用demo测试接收
export NAMESRV_ADDR=localhost:9876
sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述

1.2.3、关闭

关闭NameServer、Broker的指令

sh mqshutdown namesrv
sh mqshutdown broker

1.3、RocketMQ角色 与 集群

  • Broker:处理消息
  • NameServer:Broker向它注册路由信息,同时Producker和Consumer向其获取Broker的路由信息。
  • Producer:消息生产者
  • Consumer:消息消费者
  • Topic: 用来区分不同类型的消息
  • Message Queue: 一个Topic里面有多个Message Queue,消息可以并行往各个Message Queue发消息
    在这里插入图片描述
  • Broker 分为Master(主节点,主要处理写操作)、Slave(从节点,主要处理读操作):
    1、一个Master对应多个Slave,一个Slave只能对应一个Master。
    2、它两通过指定相同的BrokerName对应关系,用BrokerId来区分Master(用0表示)、Slave(用非0表示)。
    3、Master会把自身的数据同步给对应的Slave。

RocketMQ Broker 的集群搭建有以下几种方式:
1、单Master模式:只用一个主机搭建,一般仅测试时使用。
2、多Master模式:配置简单,某个主机宕机可能会影响部分消息的订阅。
3、多Master多Slave模式(异步):生产者将消息发送给master之后完成消息回馈,再发给Slave。效率高。
4、多Master多Slave模式(同步):生产者将消息发送给master,再给Slave之后完成消息回馈。效率低,消息一致性高。

2、RocketMQ集群搭建

本文参考视频:https://www.bilibili.com/video/BV1L4411y7mn?p=15&spm_id_from=pageDriver

接下来我们来尝试搭建由两个Master、两个Slave组成的RocketMQ集群。

本来应该用4台Linux主机来搭建,条件有限,我用两台主机来搭建,也就是两台都启动Master、Slave。

下面是主机ip对应角色:
在这里插入图片描述
下面是搭建步骤,两台主机都需要按照下面操作

2.1、第一步:修改hosts

为了方便访问,修改一下hosts

vim /etc/hosts

hosts 添加内容:

# nameserver
192.168.1.11  rocketmq-nameserver1
192.168.1.12  rocketmq-nameserver2
# broker
192.168.1.11  rocketmq-master1
192.168.1.11  rocketmq-slave2
192.168.1.12  rocketmq-master2
192.168.1.12  rocketmq-slave1

配置完成重启网卡

systemctl restart network

2.2、第二步:防火墙开启对应端口

这里使用RocketMQ的三个默认端口

firewall-cmd --remove-port=9876/tcp --permanent               // nameserver
firewall-cmd --remove-port=10911/tcp --permanent              // master
firewall-cmd --remove-port=11011/tcp --permanent              // slave
firewall-cmd --reload

2.3、第三步:配置RocketMQ的环境变量

修改profile文件

vim /etc/profile

最后一排添加如下内容

# set rocketmq
ROCKETMQ_HOME=/usr/local/rocketmq
PATH=$PATH:$ROCKETMQ_HOME/bin
export ROCKETMQ_HOME PATH

注意:ROCKETMQ_HOME=后面跟的是rocketmq的根目录

使其生效

source /etc/profile

2.4、第四步:Broker配置文件

在配置之前,我们需要先创建消息的存储路径:

mkdir /usr/local/rocketmq/store
mkdir /usr/local/rocketmq/store/commitlog
mkdir /usr/local/rocketmq/store/consumequeue
mkdir /usr/local/rocketmq/store/index

Master 1 的配置(主机1:192.168.1.11)

/usr/local/rocketmq/conf 文件夹下有示例配置文件,可以先查看一下

vim /usr/soft/rocketmq/conf/2m-2s-sync/broker-a.properties

修改配置如下:

# 所属集群名字
brokerClusterName=rocketmq-cluster
# broker名字,注意此处不同配置文件不一样
brokerName=broker-a
# 0 Master,>0 Slave
brokerId=0
# 所有nameServer地址,与hosts里面的相同
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker对外服务的监听端口
listenPort=10911
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# COnsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/usr/local/roketmq/store
# commitLog 存储路径
storePathCommitLog=/usr/local/roketmq/store/commitLog
# 消费队列存储路径
storePathConsumeQueue=/usr/local/roketmq/store/consumequeue
# 消息索引路径
storePathIndex=/usr/local/roketmq/store/index
# checkpoint文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
# abort文件存储路径
abortFile=/usr/local/rocketmq/store/abort
# 限制消息大小
maxMessageSize=65536
# Broker角色 :ASYNC_MASTER(异步复制master)、SYNC_MASTER(同步双写master)、SLAVE
brokerRole=SYNC_MASTER
# 刷盘方式:ASYNC_FLUSH(异步刷盘)、SYN_FLUSH(同步刷盘)
flushDiskType=SYNC_FLUSH

Slave 2的配置(主机1:192.168.1.11)

vim /usr/soft/rocketmq/conf/2m-2s-sync/broker-b-s.properties

修改配置如下:

# 所属集群名字
brokerClusterName=rocketmq-cluster
# broker名字,注意此处不同配置文件不一样
brokerName=broker-b
# 0 Master,>0 Slave
brokerId=1
# 所有nameServer地址,与hosts里面的相同
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876
# 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
# 是否允许broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
# 是否允许broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
# Broker对外服务的监听端口
listenPort=11011
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=120
# commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# COnsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# 检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
# 存储路径
storePathRootDir=/usr/local/roketmq/store
# commitLog 存储路径
storePathCommitLog=/usr/local/roketmq/store/commitLog
# 消费队列存储路径
storePathConsumeQueue=/usr/local/roketmq/store/consumequeue
# 消息索引路径
storePathIndex=/usr/local/roketmq/store/index
# checkpoint文件存储路径
storeCheckpoint=/usr/local/rocketmq/store/checkpoint
# abort文件存储路径
abortFile=/usr/local/rocketmq/store/abort
# 限制消息大小
maxMessageSize=65536
# Broker角色 :ASYNC_MASTER(异步复制master)、SYNC_MASTER(同步双写master)、SLAVE
brokerRole=SLAVE
# 刷盘方式:ASYNC_FLUSH(异步刷盘)、SYN_FLUSH(同步刷盘)
flushDiskType=ASYNC_FLUSH

Master 2 的配置(主机1:192.168.1.12)

vim /usr/soft/rocketmq/conf/2m-2s-sync/broker-b.properties

配置文件内容和Master 1基本一样,只有如下不同:
在这里插入图片描述
Sleve 1的配置(主机1:192.168.1.12)

vim /usr/soft/rocketmq/conf/2m-2s-sync/broker-a-s.properties

配置文件内容和Sleve 2基本一样,只有如下不同:
在这里插入图片描述

2.5、第五步:启动服务

注意:
1、两台主机都进行如下操作
2、下列指令都在 /usr/local/rocketmq/bin目录下操作
启动之前检查一下两台主机的java 内存配置修改了没有:

sudo vim runserver.sh
sudo vim runbroker.sh 

在这里插入图片描述
启动NameServer:

nohup sh mqnamesrv &

启动Broker:

// 主机 192.168.1.11 :
// Master 1
nohup sh mqbroker -c /usr/soft/rocketmq/conf/2m-2s-sync/broker-a.properties &
// Sleve 2
nohup sh mqbroker -c /usr/soft/rocketmq/conf/2m-2s-sync/broker-b-s.properties &

// 主机 192.168.1.12 :
// Master 2
nohup sh mqbroker -c /usr/soft/rocketmq/conf/2m-2s-sync/broker-b.properties &
// Sleve 1
nohup sh mqbroker -c /usr/soft/rocketmq/conf/2m-2s-sync/broker-a-s.properties &

使用jps指令,可以查看服务是否在运行

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值