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
文件定义了两个服务:namesrv
和broker
。其中,namesrv
是RocketMQ的名称服务,broker
是消息队列的代理服务。
2.3 构建和启动RocketMQ
在项目目录中执行以下命令来构建和启动RocketMQ:
$ docker-compose up -d
这将启动两个服务,并将RocketMQ的名称服务监听在9876
端口,消息队列的代理服务监听在10911
和10909
端口。
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