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指令,可以查看服务是否在运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值