RocketMQ 介绍与安装

第1章 RocketMQ

1.1 MQ介绍

​ MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

1.2 主流MQ对比

目前市面上成熟主流的MQ有Kafka 、RocketMQ、RabbitMQ,我们这里对每款MQ做一个简单介绍。

Kafka

Apache下的一个子项目,使用scala实现的一个高性能分布式Publish/Subscribe消息队列系统。

快速持久化:通过磁盘顺序读写与零拷贝机制,可以在O(1)的系统开销下进行消息持久化;
高吞吐:在一台普通的服务器上既可以达到10W/s的吞吐速率;
高堆积:支持topic下消费者较长时间离线,消息堆积量大;
完全的分布式系统:Broker、Producer、Consumer都原生自动支持分布式,依赖zookeeper自动实现复载均衡;
支持Hadoop数据并行加载:对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。

RocketMQ

RocketMQ的前身是Metaq,当Metaq3.0发布时,产品名称改为RocketMQ。RocketMQ是一款分布式、队列模型的消息中间件,具有以下特点 :

能够保证严格的消息顺序
提供丰富的消息拉取模式
高效的订阅者水平扩展能力
实时的消息订阅机制
支持事务消息
亿级消息堆积能力

RabbitMQ

使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP,STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。
同时实现了Broker架构,核心思想是生产者不会将消息直接发送给队列,消息在发送给客户端时先在中心队列排队。
对路由(Routing),负载均衡(Load balance)、数据持久化都有很好的支持。多用于进行企业级的ESB整合。

特性对比
在这里插入图片描述

1.3 RocketMQ环境要求

RocketMQ对环境有要求,如下:

64bit OS, Linux/Unix/Mac is recommended;
64bit JDK 1.8+;
Maven 3.2.x;
Git;
4g+ free disk for Broker server

1.4 RocketMQ下载

RocketMQ目前已经捐赠给了Apache,官方地址为http://rocketmq.apache.org/ 目前最新版本已经是4.4版本,我们可以点击Latest release v4.4进入下载页。
在这里插入图片描述
这里提供了源码文件和二进制文件下载地址,我们可以根据自己的需要下载。我们等会会对源码进行学习,所以这里可以选择源码下载。
在这里插入图片描述
下载后的源码文件
在这里插入图片描述
下载后的安装文件在这里
在这里插入图片描述

1.5 单节点RocketMQ安装

1.5.1 环境准备

我们先准备一台centos虚拟机,ip:192.168.211.143,在hosts文件中配置地址与IP的映射关系。
在这里插入图片描述
修改/etc/hosts文件,加入如下映射关系

192.168.211.143 rocketmq-nameserver1
192.168.211.143 rocketmq-master1
1.5.2 安装配置

我们可以把安装文件上传到虚拟机上,并解压安装解压文件存放到/usr/local/server/mq目录下。

unzip rocketmq-all-4.4.0-bin-release.zip -d /usr/local/server/mq

更改解压后的文件名

mv rocketmq-all-4.4.0-bin-release rocketmq

创建RocketMQ存储文件的目录,执行如下命令:

[root@localhost rocketmq]# mkdir logs
[root@localhost rocketmq]# mkdir store
[root@localhost rocketmq]# cd store/
[root@localhost store]# mkdir commitlog
[root@localhost store]# mkdir consumequeue
[root@localhost store]# mkdir index

文件夹说明:

logs:存储RocketMQ日志目录
store:存储RocketMQ数据文件目录
commitlog:存储RocketMQ消息信息
consumequeue、index:存储消息的索引数据

conf目录配置文件说明

2m-2s-async:2主2从异步
2m-2s-sync :2主2从同步
2m-noslave :2主没有从

我们这里先配置单节点,可以修改2m-2s-async的配置实现。进入2m-2s-async目录,修改第1个配置文件broker-a.properties

vi broker-a.properties

将如下配置覆盖掉broker-a.properties所有配置

#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示Master, > 0 表示slave
brokerId=0
#nameServer 地址,分号分割
namesrvAddr=rocketmq-nameserver1: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
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/server/mq/rocketmq/store
#commitLog存储路径
storePathCommitLog=/usr/local/server/mq/rocketmq/store/commitlog
#消费队列存储路径
storePathConsumeQueue=/usr/local/server/mq/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/local/server/mq/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/server/mq/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/usr/local/server/mq/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
# flushCommitLogLeastPages=4
# flushConsumeQueueLeastPages=2
# flushCommitLogThoroughInterval=10000
# flushConsumeQueueThoroughInterval=60000
# Broker 的角色
# - ASYNC_MASTER 异步复制Master
# - SYNC_MASTER 同步双写Master
# - SLAVE
brokerRole=ASYNC_MASTER
# 刷盘方式
# - ASYNC_FLUSH 异步刷盘
# - SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageTreadPoolNums=128
#拉消息线程池数量
#pullMessageTreadPoolNums=128

进入conf目录,替换所有xml中的${user.home},保证日志路径正确

sed -i 's#${user.home}#/usr/local/server/mq/rocketmq#g' *.xml

注意:sed -i在这里起一个批量替换的作用

sed -i 's#原字符串#新字符#g' 替换的文件

输入以下命令,修改conf目录下的broker.conf文件:

vi /usr/local/server/mq/rocketmq/conf/broker.conf

添加下面代码:

brokerIP1=192.168.211.143

RocketMQ对内存的要求比较高,最少1G,如果内存太少,会影响RocketMQ的运行效率和执行性能。我们需要修改bin目录下的runbroker.sh和runserver.sh文件

runbroker.sh

改前:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"

改后:
JAVA_OPT="${JAVA_OPT} -server -Xms128m -Xmx256m -Xmn256m"

runserver.sh

改前:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

改后:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn1g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

先启动namesrv

nohup sh mqnamesrv -n 192.168.211.143:9876 &

再启动broker

nohup sh mqbroker -n 192.168.211.143:9876 -c /usr/local/server/mq/rocketmq/conf/2m-2s-async/broker-a.properties > /dev/null 2>&1 &

输入jps查看进程

[root@localhost rocketmqlogs]# jps
3255 NamesrvStartup
3290 BrokerStartup
3454 Jps
[root@localhost rocketmqlogs]#

注:对于某些人来说,安装的虚拟机服务器没有打开相关端口(关掉防火墙),以至于运行RocketMQ控制台时,连接失败,解决方式:
linux下查看防火墙状态
输入命令:

[root@localhost src]# service iptables status
Redirecting to /bin/systemctl status  iptables.service
Unit iptables.service could not be found.
提示Redirecting to /bin/systemctl status  iptables.service Unit iptables.service could not be found.

在CentOS 7或RHEL 7中防火墙由firewalld来管理,

如果要添加范围例外端口 如 1000-2000
语法命令如下:启用区域端口和协议组合
firewall-cmd [–zone=] --add-port=[-]/ [–timeout=]
此举将启用端口和协议的组合。端口可以是一个单独的端口 或者是一个端口范围 - 。协议可以是 tcp 或 udp。
实际命令如下:

添加

firewall-cmd --zone=public --add-port=8088/tcp --permanent (--permanent永久生效,没有此参数重启后失效)

firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent 

重新载入

firewall-cmd --reload

查看

firewall-cmd --zone=public --query-port=80/tcp

删除

firewall-cmd --zone=public --remove-port=80/tcp --permanent

在这里,你要开启9876、和另一个端口(如果运行控制台时报错,会有相关端口信息显示,然后直接开启就行了)

firewall-cmd --zone=public --add-port=9876/tcp --permanent

firewall-cmd --zone=public --add-port=xxxxx/tcp --permanent
1.5.3 RocketMQ控制台安装

我们这里直接将RocketMQ控制代码的源码放到项目中运行,后面课程结束后我们直接运行jar包即可。RocketMQ的控制台由一些RocketMQ爱好者提供。

下载地址:https://github.com/apache/rocketmq-externals/tree/master
在这里插入图片描述下载后,我们将rocketmq-console工程拷贝到IDEA的工作空间,并找到启动类App
我们这里目前用的是最新版本,下载的工程中rocketmq的包是快照版,需要将快照版的后缀去掉,因为目前中央仓库中已经没有快照版的包了。
在这里插入图片描述找到application.properties,配置RocketMQ的namesrv地址,如下图:
在这里插入图片描述

1.6 RocketMQ架构介绍

在这里插入图片描述

上面是RocketMQ的部署结构图,操作流程如下介绍:

  1. 启动Namesrv,Namesrv起来后监听端口,等待Broker、Produer、Consumer连上来,相当于一个路由控制中心。
  2. Broker启动,跟所有的Namesrv保持长连接,定时发送心跳包。心跳包中包含当前Broker信息(IP+端口等)以及存储所有topic信息。注册成功后,namesrv集群中就有Topic跟Broker的映射关系。
  3. 收发消息前,先创建topic,创建topic时需要指定该topic要存储在哪些Broker上。也可以在发送消息时自动创建Topic。
  4. Producer发送消息,启动时先跟Namesrv集群中的其中一台建立长连接,并从Namesrv中获取当前发送的Topic存在哪些Broker上,然后跟对应的Broker建长连接,直接向Broker发消息。
  5. Consumer跟Producer类似。跟其中一台Namesrv建立长连接,获取当前订阅Topic存在哪些Broker,然后直接跟Broker建立连接通道,开始消费消息。

注:以上内容来自以下两个链接和我自己安装时所出现的问题以及解决方法
第1章 RocketMQ 介绍与安装:https://blog.csdn.net/Same_Liu/article/details/89517131
Linux下查看防火墙状态报错Unit iptables.service could not be found:https://blog.csdn.net/liuguichenglove/article/details/84202116

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值