单机部署RocketMQ 4.9.4和dashboard

本文详细介绍了Apache RocketMQ的部署过程,包括NameServer、Broker的启动,以及Topic的创建和消息的生产与消费。此外,还提供了单机部署RocketMQ 4.9.4的步骤,并涉及到Docker部署RocketMQ Dashboard的方法,以实现消息中间件的管理和监控。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.前言

2. RocketMQ工作流程

2.1. 启动NameServer

2.2. 启动 Broker

2.3. 创建 Topic

2.4. 生产者发送消息

2.5. 消费者接受消息

3. 单机部署RocketMQ 4.9.4

3.1 下载安装

3.2 启动NameServer

3.3 启动Broker

3.4 测试消息收发

3.5 服务关闭

4. docker部署rocketmq dashboard


1.前言

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也可以部署多个。

2. RocketMQ工作流程

2.1. 启动NameServer

启动NameServer。NameServer启动后监听端口,等待Broker、Producer、Consumer连接,相当于一个路由控制中心。

2.2. 启动 Broker

启动 Broker。与所有 NameServer 保持长连接,定时发送心跳包。心跳包中包含当前 Broker 信息以及存储所有 Topic 信息。注册成功后,NameServer 集群中就有 Topic跟Broker 的映射关系。

2.3. 创建 Topic

创建 Topic 时需要指定该 Topic 要存储在哪些 Broker 上,也可以在发送消息时自动创建Topic。

2.4. 生产者发送消息

生产者发送消息。启动时先跟 NameServer 集群中的其中一台建立长连接,并从 NameServer 中获取当前发送的 Topic存在于哪些 Broker 上,轮询从队列列表中选择一个队列,然后与队列所在的 Broker建立长连接从而向 Broker发消息。

2.5. 消费者接受消息

消费者接受消息。跟其中一台NameServer建立长连接,获取当前订阅Topic存在哪些Broker上,然后直接跟Broker建立连接通道,然后开始消费消息。

3. 单机部署RocketMQ 4.9.4

  • 环境:

Centos7,JDK:java-1.8.0-openjdk

  • 部署流程:

下载二进制包安装 --> 启动NameServer --> 启动Broker --> 测试收发消息 --> 关闭服务(可选)

3.1 下载安装

RocketMQ 的安装包分为两种,二进制包和源码包

二进制包下载:Apache Downloads

源码包下载:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.4/rocketmq-all-4.9.4-source-release.zip

  • 二进制包解压后可直接运行,源码包需要编译后运行,这里使用二进包安装的方式

cd /usr/local && wget https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip
unzip rocketmq-all-4.9.4-bin-release.zip
cd  rocketmq-all-4.9.4-bin-release
  • 可选:nameserver和broker默认启动内存4G,由于主机内存有限,这里将两个服务的内存调小点。方法如下
cd /usr/local/rocketmq-all-4.9.4-bin-release/bin
# 修改nameserver启动内存
vim runserver.sh
# 找到下面的原代码,注释
#JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" 
#修改为
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

# 修改broker启动内存
vim runbroker.sh
# 找到下面的原代码,注释
#JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g"
#修改为
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:PermSize=128m -XX:MaxPermSize=320m"

 

  • 服务开放端口:

namesrv:9876;broker:10909、10911

3.2 启动NameServer

# 启动
nohup sh bin/mqnamesrv &
# 查看是否启动成功
tail -f ./nohup.log
The Name Server boot success... # 表示 启动成功
# 也可查看端口9876是否监听
netstat -lntp|grep 9876
tcp6       0      0 :::9876                 :::*                    LISTEN      27017/java      

3.3 启动Broker

# 注意:NameServer成功启动后,才启动Broker
# 需要在添加本机名host解析,否则会报找不到本机名解析地址
# 如本机名test-rocketmq,在/etc/hosts中添加记录127.0.0.1 test-rocketmq
# -n 表示指定nameserver的地址和端口,部署在同一台机用localhost:9876即可
nohup sh bin/mqbroker -n localhost:9876 &
# 查看是否启动成功
tail -f ./nohup.log
The broker[test-rocketmq, 172.16.1.5:10911] boot success.
# 查看端口是否启动
 netstat -lnpt|grep 1091
tcp6       0      0 :::10911                :::*                    LISTEN      27027/java          
tcp6       0      0 :::10912                :::*                    LISTEN      27027/java          

3.4 测试消息收发

$ export NAMESRV_ADDR=localhost:9876
# 测试消息发送
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer
 SendResult [sendStatus=SEND_OK, msgId= ...
# 测试消息消费
$ sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

3.5 服务关闭

$ sh bin/mqshutdown broker
The mqbroker(27027) is running...
Send shutdown request to mqbroker(27027) OK

$ sh bin/mqshutdown namesrv
The mqnamesrv(27017) is running...
Send shutdown request to mqnamesrv(27017) OK

4. docker部署rocketmq dashboard

RocketMQ Dashboard 是 RocketMQ 的管控利器,为用户提供客户端和应用程序的各种事件、性能的统计信息,支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。支持功能有:

  • 创建主题Topoic
  • 创建消费者组 consumer
  • 重置消费位点
  • 扩容 Topic 队列
  • 扩容 Broker
  • 发送消息

官方文档:RocketMQ Dashboard | RocketMQ

注:面板不带用户权限管理,安装方式支持源码和docker

安装 

$ docker pull apacherocketmq/rocketmq-dashboard:latest
# 注意运行前将127.0.0.1:9876改成nameserver运行主机的IP地址
$ docker run -d --name rocketmq-dashboard -e "JAVA_OPTS=-Drocketmq.namesrv.addr=127.0.0.1:9876" -p 8080:8080 -t apacherocketmq/rocketmq-dashboard:latest

访问控制台:http://127.0.0.1:8080

 

### 三级标题:使用 Docker 部署 RocketMQ RocketMQ 支持通过 Docker Compose 快速部署单机版或集群版的消息服务,适用于开发、测试生产环境。用户可以通过定义 `docker-compose.yml` 文件来启动 NameServer、Broker Dashboard 等组件。 以下是一个典型的 `rocketmq-docker-compose.yml` 配置文件内容示例: ```yaml version: '3.5' services: namesrv: image: apache/rocketmq:4.9.4 container_name: rmqnamesrv ports: - "9876:9876" command: ["sh", "-c", "mkdir -p /home/rocketmq/store && mqnamesrv"] broker: image: apache/rocketmq:4.9.4 container_name: rmqbroker ports: - "10911:10911" - "10909:10909" environment: - NAMESRV_ADDR=rmqnamesrv:9876 command: ["sh", "-c", "mkdir -p /home/rocketmq/store && mqbroker -n rmqnamesrv:9876 -c /home/rocketmq/broker.conf"] volumes: - ./broker.conf:/home/rocketmq/broker.conf depends_on: - namesrv ``` 在配置完成后,切换到包含该 YAML 文件的目录并执行以下命令以启动服务: ```bash docker compose -f rocketmq-docker-compose.yml up -d ``` 上述命令将以后台模式启动容器化服务[^1]。 为了便于管理监控 RocketMQ 实例,可以额外部署 RocketMQ Dashboard,它提供了一个图形界面用于查看主题、消费者组以及发送消费消息的状态。Dashboard部署方式同样可以通过 Docker 完成,并且需要指定 NameServer 地址以便连接至 RocketMQ 集群。 例如,在 Spring Boot 应用程序中集成 RocketMQ 客户端时,可在 `application.yml` 中配置如下属性: ```yaml rocketmq: name-server: 192.168.141.130:9876 producer: group: chatGroup send-message-timeout: 3000 ``` 同时需引入相应的 Maven 依赖以支持与 RocketMQ 的交互[^2]。 对于更复杂的部署需求,如高可用性或多节点集群设置,则应在 Docker Compose 文件中添加更多 Broker 节点,并合理规划网络服务发现机制,确保各个组件能够正确通信并形成稳定的集群结构。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值