Linux Docker 部署 RocketMQ
1. 介绍
RocketMQ 是一款开源的分布式消息队列系统,适用于高吞吐量、高可用性的场景。使用 Docker 可以方便地部署和管理 RocketMQ,本文将介绍如何在 Linux 系统上使用 Docker 部署 RocketMQ。
2. 部署流程
下面是部署 RocketMQ 的整个流程,可以用表格展示:
步骤 | 描述 |
---|---|
1. 安装 Docker | 在 Linux 系统上安装 Docker |
2. 下载 RocketMQ 镜像 | 从 Docker Hub 下载 RocketMQ 镜像 |
3. 创建网络 | 创建 Docker 网络用于容器间通信 |
4. 启动 NameServer 容器 | 在 Docker 中启动 NameServer 容器 |
5. 启动 Broker 容器 | 在 Docker 中启动 Broker 容器 |
6. 配置 RocketMQ | 配置 RocketMQ 参数 |
7. 测试 RocketMQ | 使用示例代码测试 RocketMQ 是否正常工作 |
接下来将详细介绍每个步骤需要做什么。
3. 步骤详解
3.1 安装 Docker
首先需要在 Linux 系统上安装 Docker。可以使用以下命令安装 Docker:
sudo apt-get update # 更新软件包列表
sudo apt-get install docker-ce docker-ce-cli containerd.io # 安装 Docker
3.2 下载 RocketMQ 镜像
接下来需要从 Docker Hub 下载 RocketMQ 镜像。可以使用以下命令下载最新版本的 RocketMQ 镜像:
docker pull rocketmqinc/rocketmq
3.3 创建网络
为了实现容器之间的通信,需要创建一个 Docker 网络。可以使用以下命令创建网络:
docker network create rocketmq-network
3.4 启动 NameServer 容器
NameServer 是 RocketMQ 的核心组件,负责管理 Topic 和 Broker 的信息。可以使用以下命令启动 NameServer 容器:
docker run -d --name namesrv -p 9876:9876 --network rocketmq-network rocketmqinc/rocketmq:latest sh mqnamesrv
3.5 启动 Broker 容器
Broker 是 RocketMQ 的消息存储和传递的核心组件。可以使用以下命令启动 Broker 容器:
docker run -d --name broker -p 10909:10909 -p 10911:10911 --network rocketmq-network -e "NAMESRV_ADDR=namesrv:9876" -e "MAX_POSSIBLE_HEAP=1000000000" rocketmqinc/rocketmq:latest sh mqbroker -c /opt/rocketmq-4.8.0/conf/2m-noslave/broker.conf
3.6 配置 RocketMQ
在启动 Broker 容器时,通过 -e
参数可以设置环境变量,进而配置 RocketMQ。在上述命令中,设置了 NAMESRV_ADDR
和 MAX_POSSIBLE_HEAP
两个环境变量。可以根据实际需求进行配置。
3.7 测试 RocketMQ
最后,可以使用示例代码测试 RocketMQ 是否正常工作。以下是一个简单的 Java 示例代码,用于发送和接收消息:
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.common.message.Message;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.consumer.MessageListenerConcurrently;
import org.apache.rocketmq.client.exception.MQClientException;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.common.message.MessageExt;
import java.util.List;
public class RocketMQExample {
public static void main(String[] args) throws MQClientException, InterruptedException {
// 创建一个生产者
DefaultMQProducer producer = new DefaultMQProducer("example_group");
producer.setNamesrvAddr("localhost:9876");
producer.start();
// 创建一个消费者
DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("example_group");
consumer.setNamesrvAddr("localhost:9876");
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUM