图片

RocketMQ 是阿里巴巴开源的分布式消息队列,现在是 Apache 顶级项目,GitHub 星标超过 1.9 万。它主打低延迟、高可靠,双十一这种超大并发都扛得住,国内很多互联网公司都在用。

我在生产环境用过 RocketMQ 传订单消息,高峰期千万 QPS 也稳,延迟确实低,没掉过链子。今天聊聊它好用在哪。

RocketMQ 解决了什么问题

传统消息队列,高并发场景下延迟飙高,还容易丢消息,双十一这种峰值根本扛不住。业务要订单消息不丢,还要低延迟,RocketMQ 就是为这个设计,亿级消息堆积也稳得住,延迟还是毫秒级。

它还支持事务消息,分布式场景能保证最终一致性,订单创建扣库存,不用自己写补偿逻辑,RocketMQ 事务消息帮你搞定。

基础例子看一下

用 Docker 跑一个单节点 RocketMQ:

docker run -d -p 9876:9876 apache/rocketmq:4.9.5 sh mqnamesrv

启动 broker:

docker run -d -p 10911:10911 -p 10909:10909 \
  -e "NAMESRV_ADDR=localhost:9876" \
  apache/rocketmq:4.9.5 sh mqbroker

Java 代码发送消息:

DefaultMQProducer producer = new DefaultMQProducer("please_rename_unique_group_name");
producer.setNamesrvAddr("localhost:9876");
producer.start();

Message msg = new Message("TopicTest",
    "TagA",
    "Hello RocketMQ".getBytes(RemotingHelper.DEFAULT_CHARSET)
);
SendResult sendResult = producer.send(msg);
System.out.printf("%s%n", sendResult);

producer.shutdown();

消费消息:

DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("please_rename_unique_group_name");
consumer.setNamesrvAddr("localhost:9876");
consumer.subscribe("TopicTest", "*");
consumer.registerMessageListener((List<MessageExt> msgs, ConsumeConcurrentlyContext context) -> {
  for (MessageExt msg : msgs) {
    System.out.printf("%s%n", new String(msg.getBody()));
  }
  return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
});
consumer.start();

就这么简单,配置好 name-server,创建生产者消费者,发消息收消息搞定。

核心特性

高吞吐量低延迟

单机支持十万级 QPS,延迟保持毫秒级,高峰期也不飘,双十一这种量级都能扛,互联网高并发场景够用。

消息可靠不丢

多种持久化方式,同步双写异步刷盘,消息不丢,极端情况也只会丢一两条,金融级场景都能用。

支持海量堆积

亿级消息堆积能力,broker 扛得住,性能不会掉得太厉害,下游消费慢了也不用慌。

事务消息

支持分布式事务消息,订单创建扣库存这种场景,帮你保证最终一致性,不用自己写补偿。

多种消息模式

集群消费、广播消费都支持,你要负载均衡还是所有消费者都收到,自己选。

延迟消息

消息发出去,可以指定多久之后才能被消费,定时任务场景不用自己扫数据库,直接发延迟消息,方便。

哪些场景用 RocketMQ

互联网高并发场景,订单、交易、支付这些核心链路,需要低延迟可靠消息,RocketMQ 完美。分布式事务要最终一致性,用事务消息,省好多事。

异步解耦服务,下单之后通知库存、通知营销,都扔给 RocketMQ,服务解耦快。削峰填谷,活动高峰期请求先存在消息 queue,消费者慢慢处理,不会把数据库打垮。

RocketMQ 有哪些优缺点

优点就是真能扛,高并发低延迟确实做到了,国内互联网公司用得很多,双十一验证过,稳定。事务消息这个功能比 Kafka 和 RabbitMQ 方便,不用自己折腾。阿里捐给 Apache 了,一直维护更新,社区活跃,文档也全,国内出问题好排查。

缺点呢,早年阿里内部出来的,早期文档不全,现在好多了,但社区资料还是不如 Kafka 多。原生多语言客户端不如 Kafka 全,主要 Java 用得多,其他语言大多是第三方客户端,不如官方原生稳。如果你就是 Java 技术栈,完全没问题。

现在 RocketMQ 发展得怎么样

现在是 Apache 顶级项目,阿里和社区一直在维护,版本更新快,现在 5.x 性能更好,存算分离架构,越来越完善。国内互联网公司用得特别多,高并发场景首选,用户越来越多。

现在学 RocketMQ 值得吗

做 Java 后端互联网开发,肯定值得学,国内大厂很多都用,找工作面试经常问,不会不行。基础使用不难,跟着例子走,一天就能跑通发消息消费,原理慢慢理解,常用操作半天学会。高并发场景现在越来越多,RocketMQ 就是国内首选,学会了工作直接用,绝对值得学。

项目地址:https://github.com/apache/rocketmq

就能跑通发消息消费,原理慢慢理解,常用操作半天学会。高并发场景现在越来越多,RocketMQ 就是国内首选,学会了工作直接用,绝对值得学。

项目地址:https://github.com/apache/rocketmq

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐