rocketmq name server
RocketMQ Name Server 架构和使用示例
1. 整体架构图
┌─────────────────────────────────────────────────────────────────┐
│ RocketMQ 集群架构 │
└─────────────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Name Server │ │ Name Server │ │ Name Server │
│ (主节点) │ │ (备节点) │ │ (备节点) │
│ :9876 │ │ :9877 │ │ :9878 │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
└───────────────────┼───────────────────┘
│
┌─────────────┐
│ Broker │
│ Master A │
│ :10911 │
└─────────────┘
│
┌─────────────┐
│ Broker │
│ Slave A │
│ :10912 │
└─────────────┘
│
┌─────────────┐
│ Broker │
│ Master B │
│ :10913 │
└─────────────┘
│
┌─────────────┐
│ Broker │
│ Slave B │
│ :10914 │
└─────────────┘
2. 组件交互流程图
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Producer │ │ Name Server │ │ Consumer │
│ │ │ │ │ │
└─────────────┘ └─────────────┘ └─────────────┘
│ │ │
│ 1. 获取路由信息 │ │
├──────────────────►│ │
│ │ │
│ 2. 返回Topic路由 │ │
│◄──────────────────┤ │
│ │ │
│ 3. 发送消息 │ │
├───────────────────┼──────────────────►│
│ │ │
│ │ 4. 获取路由信息 │
│ │◄──────────────────┤
│ │ │
│ │ 5. 返回Topic路由 │
│ ├──────────────────►│
│ │ │
│ │ 6. 拉取消息 │
│ │◄──────────────────┤
3. Name Server 核心功能
3.1 路由管理
- Topic 路由信息存储:维护所有 Topic 的路由表
- Broker 注册:接收 Broker 的心跳注册
- 路由发现:为 Producer 和 Consumer 提供路由信息
3.2 服务发现
- Broker 列表维护:维护活跃的 Broker 列表
- 负载均衡:为消息发送提供负载均衡策略
- 故障转移:检测 Broker 故障并更新路由
4. 配置示例
4.1 Name Server 配置 (namesrv.conf)
# 监听端口
listenPort=9876
# 数据存储路径
storePathRootDir=/opt/rocketmq/nameserver
# 集群配置
clusterName=DefaultCluster
# 日志配置
logLevel=INFO
logPath=/opt/rocketmq/logs/nameserver
4.2 Broker 配置 (broker.conf)
# Broker 名称
brokerName=broker-a
# Broker ID (0=Master, >0=Slave)
brokerId=0
# Name Server 地址
namesrvAddr=192.168.1.100:9876;192.168.1.101:9876
# 监听端口
listenPort=10911
# 数据存储路径
storePathRootDir=/opt/rocketmq/store
storePathCommitLog=/opt/rocketmq/store/commitlog
storePathConsumeQueue=/opt/rocketmq/store/consumequeue
5. 使用示例
5.1 Producer 示例
public class RocketMQProducer {
private DefaultMQProducer producer;
public void init() throws Exception {
producer = new DefaultMQProducer("producer_group");
// 设置 Name Server 地址
producer.setNamesrvAddr("192.168.1.100:9876;192.168.1.101:9876");
producer.start();
}
public void sendMessage() throws Exception {
Message msg = new Message("TopicTest", "TagA",
"Hello RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET));
SendResult result = producer.send(msg);
System.out.println("发送结果: " + result);
}
}
5.2 Consumer 示例
public class RocketMQConsumer {
private DefaultMQPushConsumer consumer;
public void init() throws Exception {
consumer = new DefaultMQPushConsumer("consumer_group");
// 设置 Name Server 地址
consumer.setNamesrvAddr("192.168.1.100:9876;192.168.1.101:9876");
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener(new MessageListenerConcurrently() {
@Override
public ConsumeConcurrentlyStatus consumeMessage(
List<MessageExt> messages,
ConsumeConcurrentlyContext context) {
for (MessageExt message : messages) {
System.out.println("收到消息: " + new String(message.getBody()));
}
return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
}
});
consumer.start();
}
}
6. 部署脚本示例
6.1 启动 Name Server
#!/bin/bash
# start-nameserver.sh
export ROCKETMQ_HOME=/opt/rocketmq
export NAMESRV_ADDR=192.168.1.100:9876
nohup sh $ROCKETMQ_HOME/bin/mqnamesrv > $ROCKETMQ_HOME/logs/namesrv.log 2>&1 &
echo "Name Server 启动完成"
6.2 启动 Broker
#!/bin/bash
# start-broker.sh
export ROCKETMQ_HOME=/opt/rocketmq
export NAMESRV_ADDR=192.168.1.100:9876
nohup sh $ROCKETMQ_HOME/bin/mqbroker -n $NAMESRV_ADDR -c $ROCKETMQ_HOME/conf/broker.conf > $ROCKETMQ_HOME/logs/broker.log 2>&1 &
echo "Broker 启动完成"
7. 监控和管理
7.1 管理命令
# 查看集群信息
sh mqadmin clusterList -n 192.168.1.100:9876
# 查看 Topic 信息
sh mqadmin topicList -n 192.168.1.100:9876
# 查看 Broker 状态
sh mqadmin brokerStatus -n 192.168.1.100:9876 -b broker-a
# 创建 Topic
sh mqadmin updateTopic -n 192.168.1.100:9876 -t TopicTest -c DefaultCluster
7.2 健康检查
# 检查 Name Server 状态
telnet 192.168.1.100 9876
# 检查 Broker 状态
telnet 192.168.1.100 10911
8. 高可用配置
8.1 Name Server 集群
- 部署多个 Name Server 实例
- 使用负载均衡器分发请求
- 配置自动故障转移
8.2 Broker 集群
- Master-Slave 架构
- 异步复制模式
- 自动故障转移
9. 性能优化建议
-
Name Server 优化
- 增加 JVM 堆内存
- 优化网络配置
- 使用 SSD 存储
-
Broker 优化
- 调整刷盘策略
- 优化消息存储
- 配置合适的队列数量
-
网络优化
- 使用专用网络
- 配置网络缓冲区
- 启用网络压缩
这个架构图展示了 RocketMQ Name Server 的核心组件、交互流程和实际使用示例,可以帮助您理解和使用 RocketMQ 消息队列系统。
本文来自博客园,作者:ukyo--碳水化合物,转载请注明原文链接:https://www.cnblogs.com/ukzq/p/19069669