RocketMQ 入门:阿里巴巴开源分布式消息队列
文章目录

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
更多推荐
所有评论(0)