likes
comments
collection
share

【RocketMq 系列】 rocketmq 安装教程

作者站长头像
站长
· 阅读数 31

rocketmq是什么

RocketMQ是阿里巴巴开发的一款消息中间件,Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余年的大规模场景打磨,RocketMQ 已经成为业内共识的金融级可靠业务消息首选方案,被广泛应用于互联网、大数据、移动互联网、物联网等领域的业务场景。

RocketMQ的部署模型

【RocketMq 系列】 rocketmq 安装教程

Apache RocketMQ 部署架构上主要分为四部分:

生产者 Producer

发布消息的角色。Producer通过 MQ 的负载均衡模块选择相应的 Broker 集群队列进行消息投递,投递的过程支持快速失败和重试。

消费者 Consumer

消息消费的角色。

  • 支持以推(push),拉(pull)两种模式对消息进行消费。
  • 同时也支持集群方式和广播方式的消费。
  • 提供实时消息订阅机制,可以满足大多数用户的需求。

名字服务器 NameServer

NameServer是一个简单的 Topic 路由注册中心,支持 Topic、Broker 的动态注册与发现。

主要包括两个功能:

  • Broker管理,NameServer接受Broker集群的注册信息并且保存下来作为路由信息的基本数据。然后提供心跳检测机制,检查Broker是否还存活;
  • 路由信息管理,每个NameServer将保存关于 Broker 集群的整个路由信息和用于客户端查询的队列信息。Producer和Consumer通过NameServer就可以知道整个Broker集群的路由信息,从而进行消息的投递和消费。

NameServer通常会有多个实例部署,各实例间相互不进行信息通讯。Broker是向每一台NameServer注册自己的路由信息,所以每一个NameServer实例上面都保存一份完整的路由信息。当某个NameServer因某种原因下线了,客户端仍然可以向其它NameServer获取路由信息。

代理服务器 Broker

Broker主要负责消息的存储、投递和查询以及服务高可用保证。

NameServer几乎无状态节点,因此可集群部署,节点之间无任何信息同步。Broker部署相对复杂。

在 Master-Slave 架构中,Broker 分为 Master 与 Slave。一个Master可以对应多个Slave,但是一个Slave只能对应一个Master。Master 与 Slave 的对应关系通过指定相同的BrokerName,不同的BrokerId 来定义,BrokerId为0表示Master,非0表示Slave。Master也可以部署多个。

部署模型小结
  • 每个 Broker 与 NameServer 集群中的所有节点建立长连接,定时注册 Topic 信息到所有 NameServer。
  • Producer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取Topic路由信息,并向提供 Topic 服务的 Master 建立长连接,且定时向 Master 发送心跳。Producer 完全无状态。
  • Consumer 与 NameServer 集群中的其中一个节点建立长连接,定期从 NameServer 获取 Topic 路由信息,并向提供 Topic 服务的 Master、Slave 建立长连接,且定时向 Master、Slave发送心跳。Consumer 既可以从 Master 订阅消息,也可以从Slave订阅消息。

下载

下载地址:rocketmq.apache.org/zh/download ,目前最新版的是5.0版本

【RocketMq 系列】 rocketmq 安装教程

这里下载4.9.3版本,下载之后会得到一个压缩包,解压之后稍做配置即可使用。

安装

这里以windows系统为例安装rocketmq。

解压之后配置 ROCKETMQ_HOME环境变量,只有windows系统需要配置环境变量

【RocketMq 系列】 rocketmq 安装教程

由于rocketmq初始化的时候mqnamesrvrunserver占用JVM内存比较大,默认为2g,所以可以根据自己的服务器内存大小进行调整,以免出现内存不足的情况。

set "JAVA_OPT=%JAVA_OPT% -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

默认情况下,rocketmq会在用户盘符下生成日志,可以通过修改conf文件夹下的broker.conf进行修改

brokerClusterName = DefaultCluster
brokerName = broker-a
brokerId = 0
deleteWhen = 04
fileReservedTime = 48
brokerRole = ASYNC_MASTER
flushDiskType = ASYNC_FLUSH

namesrvAddr=127.0.0.1:9876
autoCreateTopicEnable = true

storePathRootDir = D:\\Soft\\rocketmq\\store
#commitLog存储路径
storePathCommitLog = D:\\Soft\\rocketmq\\store\\commitlog
#消费队列存储路径
storePathConsumeQueue =D:\\Soft\\rocketmq\\store\\consumequeue
#消息索引存储路径
storePathindex = D:\\Soft\\rocketmq\\store\\index
#checkpoint文件存储路径
storeCheckpoint = D:\\Soft\\rocketmq\\store\\checkpoint
#abort文件存储路径
abortFile = D:\\Soft\\rocketmq\\store\\abort
# 磁盘利用率,达到这个利用率将报错
diskMaxUsedSpaceRatio=95

启动

先通过命令行进入rocketmq解压的bin目录下

  1. 启动命名服务器mqnamesrv

命令行输入start mqnamesrv

【RocketMq 系列】 rocketmq 安装教程

看到如下界面表示启动成功

【RocketMq 系列】 rocketmq 安装教程

  1. 启动broker

输入以下命令启动broker

start mqbroker -n localhost:9876 autoCreateTopicEnable=true &

看到如下界面表示成功

【RocketMq 系列】 rocketmq 安装教程

如果在启动过程中出现找不到主类异常的话,可以在rocketmq解压路径下的bin文件夹下找到runbroker.cmd 文件将%CLASSPATH%加上英文双引号

【RocketMq 系列】 rocketmq 安装教程

rocketmq-dashboard

rocketmq-dashboard用于对rocketmq集群、消息、topic等进行管理。

下载地址:github.com/apache/rock…

启动dashboard

启动dashboard有两种方式:

  1. 从GitHub上将源码拉下来,导入到编译器idea中,找到如下启动类,启动即可:
@SpringBootApplication
@EnableScheduling
@ServletComponentScan
@EnableMBeanExport(registration = RegistrationPolicy.IGNORE_EXISTING)
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}
  1. 将源码拉下来打成jar包,然后启动jar包即可
mvn clean package -Dmaven.test.skip=true
java -jar target/rocketmq-dashboard-1.0.1-SNAPSHOT.jar

启动之后,看到如下界面表示成功

【RocketMq 系列】 rocketmq 安装教程

在cluster菜单栏可以看到刚刚启动的rocketmq

【RocketMq 系列】 rocketmq 安装教程

然后在topic栏创建topic就可以进行消息的收发了。

总结

本篇只是介绍了rocketmq的单机部署,集群的方式也很简单,可以参照官网。

参考资料:

rocketmq.apache.org/zh/docs/

推荐阅读:

【RocketMq 系列】springboot RocketMq 入门教程 【RocketMq 系列】RocketMq 消息重试机制、死信队列