<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RocketMQ on 冯威的博客</title><link>https://fwhyy.com/tags/rocketmq/</link><description>Recent content in RocketMQ on 冯威的博客</description><generator>Hugo</generator><language>zh-CN</language><lastBuildDate>Thu, 02 Jan 2025 18:28:00 +0800</lastBuildDate><atom:link href="https://fwhyy.com/tags/rocketmq/atom.xml" rel="self" type="application/rss+xml"/><item><title>RocketMQ 和 RabbitMQ 的比较以及 RocketMQ 的使用</title><link>https://fwhyy.com/2025/01/comparison-between-rocketmq-and-rabbitmq-and-the-use-of-rocketmq/</link><pubDate>Thu, 02 Jan 2025 18:28:00 +0800</pubDate><guid>https://fwhyy.com/2025/01/comparison-between-rocketmq-and-rabbitmq-and-the-use-of-rocketmq/</guid><description>&lt;p&gt;消息队列在项目中会经常用到，目前我们使用的是 RabbitMQ，但在 Java 技术栈下，RocketMQ 使用的比较多。下面比较下 RabbitMQ 和 RocketMQ。&lt;/p&gt;
&lt;!-- more --&gt;
&lt;h2 id="rabbitmq-和-rocketmq-对比"&gt;RabbitMQ 和 RocketMQ 对比&lt;/h2&gt;
&lt;h3 id="1设计理念和架构"&gt;1、设计理念和架构&lt;/h3&gt;
&lt;p&gt;RabbitMQ：&lt;/p&gt;
&lt;p&gt;基于 AMQP（Advanced Message Queuing Protocol）协议，使用 Erlang 语言开发。Erlang 的天生高并发和容错性使得 RabbitMQ 在稳定性方面表现出色。RabbitMQ 的核心概念是 Exchange（交换机）和 Queue（队列），消息通过 Exchange 路由到 Queue，再由消费者消费。这种模型非常灵活，支持多种消息路由模式。&lt;/p&gt;
&lt;p&gt;RocketMQ：&lt;/p&gt;
&lt;p&gt;源于阿里巴巴，后捐献给 Apache 基金会，所以现在的官网是：https://rocketmq.apache.org/ 。使用 Java 语言开发，更贴近 Java 技术栈。RocketMQ 的核心概念是 Topic（主题），消息发送到 Topic，消费者订阅 Topic 进行消费。RocketMQ 的设计目标是高吞吐量、低延迟和高可靠性，适合大规模分布式系统。&lt;/p&gt;
&lt;p&gt;RocketMQ 的设计理念更偏向于解决互联网场景下的具体问题，如海量消息处理、消息顺序性等。&lt;/p&gt;
&lt;h3 id="2性能"&gt;2、性能&lt;/h3&gt;
&lt;p&gt;吞吐量：RocketMQ 在吞吐量方面通常优于 RabbitMQ，尤其是在高并发场景下。RocketMQ 的设计更偏向于高吞吐的消息传递，而 RabbitMQ 更注重消息的可靠性和灵活性。&lt;/p&gt;
&lt;p&gt;延迟：两者在延迟方面都表现不错，但在极端高负载情况下，RocketMQ 的延迟可能更低一些。&lt;/p&gt;
&lt;p&gt;不过在 ToB 的一些业务场景，RabbitMQ 是可以胜任的。&lt;/p&gt;
&lt;h3 id="3特性"&gt;3、特性&lt;/h3&gt;
&lt;p&gt;消息路由：RabbitMQ 支持多种 Exchange 类型（Direct、Topic、Fanout、Headers），提供更丰富的消息路由策略。RocketMQ 主要使用 Topic 进行消息路由，相对简单。&lt;/p&gt;
&lt;p&gt;消息过滤：RocketMQ 支持基于 Tag 和 SQL 的消息过滤，方便消费者按需订阅消息。RabbitMQ 的消息过滤相对较弱。&lt;/p&gt;
&lt;p&gt;事务消息：RocketMQ 提供了分布式事务消息的支持，可以保证消息生产和本地事务的原子性。RabbitMQ 没有直接提供事务消息的支持，需要通过其他方式实现。&lt;/p&gt;
&lt;p&gt;延迟消息：RocketMQ 支持延迟消息，可以实现定时任务等功能。RabbitMQ 通过插件可以实现类似功能。&lt;/p&gt;
&lt;p&gt;监控和管理：RocketMQ 和 RabbitMQ 都提供了丰富的监控指标和管理工具，相比之下我更喜欢 RocketMQ 的管理工具。&lt;/p&gt;
&lt;h3 id="4创新点"&gt;4、创新点&lt;/h3&gt;
&lt;p&gt;RabbitMQ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;插件系统设计灵活，易于扩展&lt;/li&gt;
&lt;li&gt;虚拟主机（vhost）概念，实现多租户隔离&lt;/li&gt;
&lt;li&gt;内存和磁盘节点的混合部署方案&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;RocketMQ:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;基于文件的消息存储系统，避免了缓存未刷盘导致的消息丢失&lt;/li&gt;
&lt;li&gt;Pull 模式和长轮询机制的结合，平衡了实时性和性能&lt;/li&gt;
&lt;li&gt;消息过滤支持在 Broker 端完成，减少网络传输开销&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="5exchange-和-topic-的区别"&gt;5、Exchange 和 Topic 的区别&lt;/h3&gt;
&lt;p&gt;RabbitMQ的 Exchange 和 RocketMQ 的 Topic 在消息路由机制上有以下主要区别：&lt;/p&gt;</description></item></channel></rss>