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_ADDRMAX_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