apache/rocketmq Docker 镜像
Apache RocketMQ是由阿里巴巴开源并捐献给Apache基金会的分布式消息与流处理平台,具备高吞吐量、低延迟、高可用性和可靠性,支持发布订阅、事务消息、定时消息等核心功能,可高效处理***、电商、物流等领域的海量数据,保障消息可靠传递与系统稳定运行,是企业级分布式架构中实现异步通信、流量削峰和数据解耦的关键组件。
Apache RocketMQ 介绍
一、概述
Apache RocketMQ 是一款开源的分布式消息中间件,2016年成为 Apache 顶级项目。它专为企业级分布式系统设计,主要解决分布式架构中的异步通信、流量削峰、系统解耦等问题,支持高并发、高可靠的消息传递,适合各类企业级业务场景。
二、核心特性
1. 高吞吐与低延迟
- 支持百万级消息吞吐量(TPS),消息投递延迟低至毫秒级,能应对高并发业务场景(如电商大促、日志采集)。
- 采用零拷贝、PageCache 等优化技术,提升消息存储和传输效率。
2. 高可靠消息投递
- 多副本机制:Broker 支持主从架构和多副本存储,消息写入时可配置同步/异步刷盘,确保数据不丢失。
- 重试机制:消费者消费失败后,支持定时重试;生产者发送失败时,可配置重试策略(如重试次数、间隔)。
- 事务消息:提供分布式事务消息能力,通过“半事务消息+本地事务+事务状态回查”机制,确保跨系统数据一致性(如电商订单与库存扣减的原子性)。
3. 灵活的消息模式
- 普通消息:默认的点对点/发布订阅模式,支持集群消费(消息只被一个消费者处理)和广播消费(消息被所有消费者处理)。
- 顺序消息:支持全局顺序(单队列)和局部顺序(按业务 key 分区),适用于需要严格顺序的场景(如订单状态变更)。
- 定时/延时消息:支持消息定时投递(如指定 10 分钟后发送),延时级别可自定义。
- 批量消息:允许生产者批量发送消息,减少网络交互,提升吞吐量。
4. 易扩展与高可用
- 无状态 NameServer:作为路由中心,NameServer 集群无状态、轻量级,可独立部署多节点,支持动态扩容,避免单点故障。
- Broker 水平扩展:Broker 支持多节点集群部署,可按业务拆分 Topic 到不同 Broker,实现存储和负载的横向扩展。
- 跨地域部署:支持多集群同步(如异地灾备),通过 DLedger 模式实现 Broker 主从自动切换。
5. 低运维成本
- 部署简单:基于 Java 开发,依赖少,支持 Docker、K8s 容器化部署,提供一键启动脚本。
- 监控完善:自带控制台(RocketMQ Dashboard),支持消息轨迹追踪、 Broker 状态监控、消费进度查询等,方便问题排查。
三、适用场景
1. 分布式系统解耦
- 场景:微服务架构中,服务间通过消息通信,替代直接 RPC 调用。
- 举例:用户下单后,订单系统发送“订单创建”消息,库存、物流、积分系统独立消费消息,避免订单系统与多个下游系统强耦合。
2. 流量削峰填谷
- 场景:秒杀、促销等突发高流量场景,通过消息队列缓冲请求,避免下游服务被瞬时流量击垮。
- 举例:秒杀活动中,用户请求先发送到 RocketMQ,下游订单服务按处理能力匀速消费消息,防止系统过载。
3. 数据一致性保障
- 场景:跨系统数据同步需确保原子性(如“下单成功则扣减库存”)。
- 举例:电商订单场景,使用 RocketMQ 事务消息:订单系统发送半事务消息→执行本地订单创建→若成功则提交消息,库存系统消费消息扣减库存;若失败则回滚消息,避免“订单创建但库存未扣减”的不一致问题。
4. 日志/数据采集
- 场景:分布式系统中,多节点日志实时采集并集中处理(如 ELK 架构)。
- 举例:应用服务器通过 RocketMQ 生产者发送日志消息,消费者将消息写入 Elasticsearch,利用 RocketMQ 高吞吐特性,支撑海量日志实时传输。
四、快速上手
1. 环境准备
- JDK 8+(推荐 JDK 8)
- Maven 3.2+(如需编译源码)
2. 下载与安装
- 从 [Apache RocketMQ 官网] 下载最新稳定版(如 5.2.0),或通过源码编译:
bash
git clone [] cd rocketmq mvn -Prelease-all -DskipTests clean install -U cd distribution/target/rocketmq-<version>/rocketmq-<version>
3. 启动服务
(1)启动 NameServer
bash# 后台启动 NameServer,日志输出到 nohup.out nohup sh bin/mqnamesrv & # 查看启动日志,出现 "The Name Server boot success" 表示启动成功 tail -f ~/logs/rocketmqlogs/namesrv.log
(2)启动 Broker
bash# 启动 Broker,指定 NameServer 地址(本地默认 9876 端口) nohup sh bin/mqbroker -n localhost:9876 & # 查看启动日志,出现 "The broker[xxx, IP:PORT] boot success" 表示启动成功 tail -f ~/logs/rocketmqlogs/broker.log
4. 发送与消费消息
(1)发送消息(Java 示例)
java// 创建生产者,指定组名 DefaultMQProducer producer = new DefaultMQProducer("producer_group"); // 设置 NameServer 地址 producer.setNamesrvAddr("localhost:9876"); // 启动生产者 producer.start(); // 创建消息(topic 为 "test_topic",tag 为 "tagA",内容为 "Hello RocketMQ") Message msg = new Message("test_topic", "tagA", "Hello RocketMQ".getBytes()); // 发送消息 SendResult sendResult = producer.send(msg); System.out.println("发送结果:" + sendResult); // 关闭生产者 producer.shutdown();
(2)消费消息(Java 示例)
java// 创建消费者,指定组名 DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("consumer_group"); // 设置 NameServer 地址 consumer.setNamesrvAddr("localhost:9876"); // 订阅 topic "test_topic",tag 为 "tagA"(* 表示所有 tag) consumer.subscribe("test_topic", "tagA"); // 注册消息监听回调 consumer.registerMessageListener((List<MessageExt> msgs, ConsumeConcurrentlyContext context) -> { for (MessageExt msg : msgs) { System.out.println("收到消息:" + new String(msg.getBody())); } // 返回 CONSUME_SUCCESS 表示消费成功 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS; }); // 启动消费者 consumer.start(); System.out.println("消费者启动成功,等待接收消息..."); // 保持运行(实际应用中需避免主线程退出) Thread.sleep(60000);
5. 停止服务
bash# 关闭 Broker sh bin/mqshutdown broker # 关闭 NameServer sh bin/mqshutdown namesrv
通过以上步骤,即可快速搭建 RocketMQ 环境并体验消息发送/消费流程。更多高级功能(如事务消息、顺序消息)可参考 [官方文档] 。
apache/rocketmq 镜像文档
apache/rocketmq 国内 Docker 镜像拉取说明
在国内网络环境下,直接使用 docker pull 访问 Docker Hub 官方仓库时,较常遇到连接超时、TLS 握手失败或 registry 响应缓慢等情况。这类问题多与跨境链路质量、运营商策略及客户端 DNS 解析有关,并非单个镜像本身异常。
轩辕镜像提供两种常用加速方式:一是使用公共加速域名 docker.xuanyuan.run 拉取(可参考 登录认证方式);二是在控制台配置 专属域名拉取,将拉取命令中的 registry 前缀替换为分配的专属域名,通常能提升成功率与稳定性。
以 apache/rocketmq 为例,加速拉取命令格式为 docker pull docker.xuanyuan.run/apache/rocketmq:<标签>,请将 <标签> 替换为具体版本。下方「镜像拉取方式」区块提供与本文一致的命令示例,可直接复制使用。
镜像拉取方式
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
DockerHub 原生拉取命令
用户好评
来自真实用户的反馈,见证轩辕镜像的优质服务
