RocketMQ 是一个分布式消息中间件,经常被用于解决高并发场景下的消息传输和处理问题。本文将介绍如何基于 Docker 来部署 RocketMQ。
准备工作
安装 Docker,默认情况下,Docker 是已经安装好了的,可以通过运行
docker --version
命令来检查一下当前 Docker 的版本号。如果需要安装 Docker,请参照 Docker 官方文档进行安装。下载 RocketMQ 的 Docker 镜像。在运行 RocketMQ 前,需要先下载 RocketMQ 的 Docker 镜像,可以通过以下命令进行下载。
docker pull rocketmqinc/rocketmq:4.7.1
运行容器
下载完 RocketMQ 的 Docker 镜像后,需要运行容器来启动 RocketMQ。
docker run -d -e "NAMESRV_ADDR=localhost:9876" -p 10909:10909 -p 10911:10911 rocketmqinc/rocketmq:4.7.1 sh ${ROCKETMQ_HOME}/bin/runserver.sh
以上命令会启动一个 Docker 容器,并开启两个端口,分别是 10909
和 10911
,对应了 Master 和 Slave 节点的通信端口。 -e
参数用来设置 NameServer 的地址,这里设置为本机的 localhost:9876
。 -p
参数用来设置容器映射到主机的端口号。
发送和消费消息
接下来可以使用 RocketMQ 提供的客户端 API 来发送和消费消息了。
以下是一个示例代码,用于发送一条消息。
// javascriptcn.com 代码示例 public class Producer { public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("producer_group"); producer.setNamesrvAddr("127.0.0.1:9876"); producer.start(); Message message = new Message("topic", "tag", "message body".getBytes()); SendResult sendResult = producer.send(message); System.out.printf("%s%n", sendResult); producer.shutdown(); } }
以下是一个示例代码,用于消费消息。
// javascriptcn.com 代码示例 public class Consumer { public static void main(String[] args) throws Exception { DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group"); consumer.setNamesrvAddr("127.0.0.1:9876"); consumer.subscribe("topic", "tag"); consumer.registerMessageListener(new MessageListenerConcurrently() { public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> list, ConsumeConcurrentlyContext context) { for (MessageExt message : list) { System.out.println(new String(message.getBody())); } return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; } }); consumer.start(); System.out.printf("Consumer Started.%n"); } }
总结
基于 Docker 部署 RocketMQ 相较于传统部署方式更为简单,同时不会影响运行环境,可以很好地解决后期应用维护困难的问题。而且使用 Docker 部署 RocketMQ 也可以为 RocketMQ 的应用开发提供一些参考。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653245237d4982a6eb4b6f79