Docker Compose安装RocketMQ

1. 介绍

RocketMQ是阿里巴巴开源的一款分布式消息队列系统,具有高可用,高性能,可伸缩性等特点。在实际应用中,我们通常使用Docker Compose来快速部署和管理RocketMQ。本文将介绍如何使用Docker Compose安装RocketMQ,并提供相关的代码示例。

2. Docker Compose安装RocketMQ步骤

2.1 准备工作

在开始前,我们需要安装Docker和Docker Compose。请确保你已经安装了最新版本的Docker和Docker Compose。

2.2 创建Docker Compose文件

在你的项目目录中创建一个名为docker-compose.yml的文件,并添加以下内容:

```yaml
version: '3.7'
services:
  namesrv:
    image: rocketmqinc/rocketmq:4.9.1
    command: sh mqnamesrv
    ports:
      - "9876:9876"
    volumes:
      - ./namesrv/logs:/root/logs
      - ./namesrv/store:/root/store
  broker:
    image: rocketmqinc/rocketmq:4.9.1
    command: sh mqbroker -c /opt/rocketmq-4.9.1/conf/2m-noslave/broker-a.properties
    ports:
      - "10911:10911"
      - "10909:10909"
    environment:
      - NAMESRV_ADDR=namesrv:9876
    volumes:
      - ./broker/logs:/opt/logs
      - ./broker/store:/opt/store

上述docker-compose.yml文件定义了两个服务:namesrvbroker。其中,namesrv是RocketMQ的名称服务,broker是消息队列的代理服务。

2.3 构建和启动RocketMQ

在项目目录中执行以下命令来构建和启动RocketMQ:

$ docker-compose up -d

这将启动两个服务,并将RocketMQ的名称服务监听在9876端口,消息队列的代理服务监听在1091110909端口。

2.4 验证RocketMQ安装

可以使用以下命令来验证RocketMQ是否已经成功安装:

$ docker-compose ps

如果一切正常,你将看到输出类似于以下内容:

      Name                     Command            State            Ports
---------------------------------------------------------------------------------
YOUR_PROJECT_namesrv_1   sh mqnamesrv           Up      0.0.0.0:9876->9876/tcp
YOUR_PROJECT_broker_1    sh mqbroker -c /op ...   Up      0.0.0.0:10909->10909/tcp,
                                                       0.0.0.0:10911->10911/tcp

## 3. RocketMQ使用示例

### 3.1 生产者示例

以下是一个简单的RocketMQ生产者示例:

```java
```java
import org.apache.rocketmq.client.producer.DefaultMQProducer;
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.client.producer.Message;
import org.apache.rocketmq.common.message.MessageType;
import org.apache.rocketmq.remoting.common.RemotingHelper;

public class Producer {
    public static void main(String[] args) {
        try {
            // 创建一个消息生产者实例
            DefaultMQProducer producer = new DefaultMQProducer("ProducerGroup");
            
            // 设置NameServer地址
            producer.setNamesrvAddr("localhost:9876");
            
            // 启动生产者
            producer.start();
            
            // 创建一个消息对象,指定Topic、Tag和消息内容
            Message message = new Message("TopicTest", "TagA", "Hello, RocketMQ!".getBytes(RemotingHelper.DEFAULT_CHARSET));
            
            // 发送消息
            SendResult result = producer.send(message);
            
            System.out.println("发送结果:" + result);
            
            // 关闭生产者
            producer.shutdown();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

### 3.2 消费者示例

以下是一个简单的RocketMQ消费者示例:

```java
```java
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyContext;
import org.apache.rocketmq.client.consumer.listener.ConsumeConcurrentlyStatus;
import org.apache.rocketmq.client.consumer.listener.MessageListenerConcurrently;
import org.apache.rocketmq.common.message.MessageExt;

import java.util.List;

public class Consumer {
    public