RocketMQ Docker詳細解析

一、RocketMQ Docker介紹

RocketMQ是阿里巴巴開源的一款分散式消息中間件,它具備高吞吐、高並發、低延遲等特點。而RocketMQ Docker則是基於Docker容器化技術的RocketMQ版本,使得用戶可以更加方便地配置和使用它。

二、RocketMQ Docker的使用

使用RocketMQ Docker,首先需要安裝Docker。然後可以通過DokerHub官方倉庫或者Apache RocketMQ官網提供的Dockerfile進行安裝。

1. DockerHub安裝方法

# 獲取RocketMQ鏡像
docker pull rocketmqinc/rocketmq

# 啟動NameServer和Broker
docker run --name rmqnamesrv -p 9876:9876 -d rocketmqinc/rocketmq sh mqnamesrv

docker run --name rmqbroker --link rmqnamesrv:rmqnamesrv -p 10911:10911 -p 10909:10909 -e "NAMESRV_ADDR=rmqnamesrv:9876" -d rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf

2. Apache官網提供的Dockerfile

# 下載官方提供的Dockerfile
git clone https://github.com/apache/rocketmq-docker.git

# 進入Dockerfile目錄
cd rocketmq-docker

# 啟動NameServer和Broker
docker-compose up -d

三、RocketMQ Docker的配置

在使用RocketMQ Docker時,用戶可以通過掛載配置文件的方式對其進行自定義。用戶可以在本地創建自定義的配置文件,在啟動容器的時候將其掛載到容器內部中。比如下面的示例:

docker run --name rmqbroker -v /path/to/custom/broker.conf:/opt/rocketmq-4.5.1-bin-release/conf/broker.conf --link rmqnamesrv:rmqnamesrv -p 10911:10911 -p 10909:10909 -e "NAMESRV_ADDR=rmqnamesrv:9876" -d rocketmqinc/rocketmq sh mqbroker -c ../conf/broker.conf

四、RocketMQ Docker的使用實例

在這裡,我們提供一個使用RocketMQ Docker的例子。該例子中,我們將模擬一個消息發送者和一個消息接收者,它們之間通過RocketMQ進行消息傳遞。

1. Dockerfile

首先,我們編寫Dockerfile來構建發送者和接收者的鏡像:

# Dockerfile

# 構建消息發送者鏡像
FROM rocketmqinc/rocketmq:4.5.1 AS producer

WORKDIR /app

RUN echo "rocketmq-console:4.5.1" >> /tmp/rocketmq-version && \
    curl https://archive.apache.org/dist/rocketmq/4.5.1/rocketmq-console-ng-1.0.1.tar.gz > rocketmq-console-ng.tar.gz && \
    tar -xzf rocketmq-console-ng.tar.gz && \
    rm -rf rocketmq-console-ng.tar.gz && \
    mv rocketmq-console-ng* rocketmq-console-ng

# 構建消息接收者鏡像
FROM rocketmqinc/rocketmq:4.5.1 AS consumer

WORKDIR /app

RUN echo "rocketmq-console:4.5.1" >> /tmp/rocketmq-version && \
    curl https://archive.apache.org/dist/rocketmq/4.5.1/rocketmq-console-ng-1.0.1.tar.gz > rocketmq-console-ng.tar.gz && \
    tar -xzf rocketmq-console-ng.tar.gz && \
    rm -rf rocketmq-console-ng.tar.gz && \
    mv rocketmq-console-ng* rocketmq-console-ng

2. 消息發送者

接下來,我們使用RocketMQ的Producer API向消息隊列中發送消息:

// Producer.java

public class Producer {
    public static void main(String[] args) throws InterruptedException, MQClientException {
        // 初始化配置
        DefaultMQProducer producer = new DefaultMQProducer("producer_group");
        producer.setNamesrvAddr("localhost:9876");
        producer.start();

        // 創建消息
        String topic = "topic_test";
        String tag = "tag_test";
        String message = "Hello World";
        Message msg = new Message(topic, tag, message.getBytes(StandardCharsets.UTF_8));

        // 發送消息
        SendResult result = producer.send(msg);
        System.out.println("Send message success: " + result.getMsgId());

        // 關閉資源
        producer.shutdown();
    }
}

3. 消息接收者

最後,我們使用RocketMQ的Consumer API來監聽消息隊列中的消息:

// Consumer.java

public class Consumer {
    public static void main(String[] args) throws InterruptedException, MQClientException {
        // 初始化配置
        DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group");
        consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
        consumer.setNamesrvAddr("localhost:9876");
        consumer.subscribe("topic_test", "tag_test");

        // 註冊消息處理器
        consumer.registerMessageListener(new MessageListenerConcurrently() {
            @Override
            public ConsumeConcurrentlyStatus consumeMessage(List msgs, ConsumeConcurrentlyContext context) {
                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                }
                return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
            }
        });

        // 啟動消費者
        consumer.start();

        // 等待消息
        Thread.sleep(Long.MAX_VALUE);

        // 關閉資源
        consumer.shutdown();
    }
}

五、總結

RocketMQ Docker使得用戶可以更加方便地使用RocketMQ,並且可以通過掛載配置文件的方式對其進行自定義。在實際使用過程中,用戶可以根據自己的需求進行適當修改,並且可以結合Docker Compose等工具來管理和部署RocketMQ容器。

原創文章,作者:RJKG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/135496.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
RJKG的頭像RJKG
上一篇 2024-10-04 00:13
下一篇 2024-10-04 00:13

相關推薦

發表回復

登錄後才能評論