RabbitMQ具有什么优势,为什么好多公司依然选择 RabbitMQ

RabbitMQ 这个消息队列相信很多程序员都用过,我第一次使用是在 2016 年,确实是一个老牌的消息队列了,但是为什么一直没有被淘汰呢?今天来聊一聊这个话题。

为什么说RabbitMQ老旧差

发布历史

为什么说 RabbitMQ 老呢?下图是 RabbitMQ 最早的发布记录,可以看到 RabbitMQ 在 2007 年已经发布,已经有 16 年多的使用历史了。

RabbitMQ 使用历史

为什么说 RabbitMQ 比较小众呢?

一方面 RabbitMQ 使用 Erlang 语言编写,这是一个比较小众的编程语言,学习成本非常高,不像 Java、Scala、C 等编程语言学起来简单。所以虽然 RabbitMQ 也是开源的消息队列,但基于 RabbitMQ 做扩展和二次开发的情况是很少的。

另一方面从使用的协议来看,RabbitMQ 支持 AMQP(Advanced Message Queuing Protocol) 协议,这也是主流消息队列不支持的。

AMQP 协议如下图:

AMQP 协议

有几个概念介绍一下:

  • Connection:一个网络连接,AMQP 协议通常使用长连接;

  • Channel:网络信道,建立在 Connection 之上的轻量级的连接,一个 Connection 可以有多个 Channel;

  • Exchange:交换器,接收消息后将消息路由转发给绑定(Binding)的 Queue;

  • Binding:Exchange 和 Queue 之间的虚拟连接;

  • Routing Key:这个概念在图中没有画,是指路由规则,用来确定 Exchange 将消息路由到哪些 Queue。

可以看到,好多概念在主流的消息队列比如 Kafka、RocketMQ 是没有的,所以说 RabbitMQ 比较小众。

性能差

在底层消息持久化的方式上,RabbitMQ 并没有使用 MMAP、Sendfile 等零拷贝技术,这是性能差的一个重要原因。

在架构上,RabbitMQ 提供了镜像队列来做 Master 的备份。如下图:

RabbitMQ架构

无论生产者发送消息,还是消费者拉取消息,如果请求发送到镜像队列,则镜像队列需要把请求转发到 Master 进行处理,Master 处理后再把结果回复给镜像节点,镜像队列回复给请求者。

在特定硬件环境下,RabbitMQ 支持的消息吞吐量在万级~十万级,相比 RocketMQ 的十万级~百万级和 Kafka 的百万级以上,吞吐量还是差一些。

为什么受欢迎?

从我过往的公司、身边的一些朋友、面试过的候选人简历可以看出,好多公司消息队列技术选型时选择了 RabbitMQ,这跟 RabbitMQ 老旧和性能差形成鲜明对比。

RabbitMQ 为什么这么受欢迎呢?

持续更新

虽然 RabbitMQ 老旧,但是并没有停止更新,而且更新还挺频繁,下图是 2023 年最近发布的几个版本:

 2023 年最近发布的几个版本

从 2007 年开始,RabbitMQ 已经有 16 年的使用历史,可以称得上是一个久经考验的战士,各种问题已经修复,学习资料丰富,性能稳定。

运维简单

RabbitMQ 是一个非常轻量级的消息队列,官方宣称开箱即用。在 Docker 上部署 RabbitMQ,三个命令就可以。

  1. 拉取镜像
docker pull rabbitmq:3.8.2-management
  1. 创建路径
mkdir /var/lib/rabbitmq
  1. 启动容器
docker run -d --name rabbitmq3.8.2 -p 5672:5672 -p 15672:15672 -v `pwd`/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --privileged=true

这种开箱即用的效果,大大降低了学习成本和运维成本。

灵活路由

依托于 AMQP 中的 Exchange,RabbitMQ 提供了灵活的路由配置,有 4 种。

  1. Direct Exchange

生产者将消息发送给 Exchange 后,Exchange 通过 Routing Key 把消息路由到对应的队列。如下图(来自官网):

Direct Exchange

  1. Fanout Exchange

生产者将消息发送给 Exchange 后,Exchange 将消息路由到所有绑定的队列,类似于广播模式。如下图(来自官网):

Fanout Exchange

  1. Topic Exchange

这种路由策略首先定义一个 Topic,topic 中可以包含 * 和 #。* 可以代表一个单词,# 可以代表 0 或多个单词。如下图(来自官网):

Topic Exchange

图中 Topic 由三个单词<celerity>.<colour>.<species>组成,分别代表特征、颜色和物种,单词之间用.间隔。这样 Q1 将接收颜色为 orange 的所有消息,Q2 将接收物种为 rabbit 的消息和特征为 lazy 的消息。

  1. Headers Exchange

这种路由策略要求消息中需要携带 Headers(类似 Http 中的消息头),队列跟 Routing Key 绑定时也要定义一个 Headers,只有绑定中定义的 Headers 跟消息中的 Header 匹配,才会路由到相应的队列。匹配规则有两种:

  • ALL:要求两个 Headers 中所有 key 和 value 匹配;
  • ANY:要求两个 Headers 任何一个 key 和 value 匹配。

如下图:

8.png

这种路由方式在定义绑定关系的时候就需要定义 Headers,如下代码:

@Bean
public Binding binding1(HeadersExchange headersExchange,Queue queue1){
 HashMap<String, Object> headers = new HashMap<>();
 headers.put("key1","aaa");
 headers.put("key2","bbb");
 return BindingBuilder.bind(queue1).to(headersExchange).whereAll(headers).match();
}

public Binding binding2(HeadersExchange headersExchange,Queue queue2){
 HashMap<String, Object> headers = new HashMap<>();
 headers.put("key1","aaa");
 headers.put("key2","bbb");
 return BindingBuilder.bind(queue2).to(headersExchange).whereAny(headers).match();
}

客户端丰富

RabbitMQ 客户端支持的编程语言是消息队列中最多的,很容易兼容自己系统使用的编程语言。参考下图(来自官网):

 客户端支持的编程语言

总结

RabbitMQ 虽然老旧,但具有运维简单、灵活路由、客户端丰富等特性。虽然吞吐量不高,但性能足够满足中小企业的使用需求。这让 RabbitMQ 成为非常受欢迎的消息队列。文章来源地址https://www.toymoban.com/diary/apps/668.html

到此这篇关于RabbitMQ具有什么优势,为什么好多公司依然选择 RabbitMQ的文章就介绍到这了,更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

原文地址:https://www.toymoban.com/diary/apps/668.html

如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用
比较并交换(CAS):Java中的CAS实现和应用场景
上一篇 2024年01月04日 23:13
分享使用wp-env在Ubuntu上设置WordPress测试环境
下一篇 2024年01月05日 22:19

相关文章

  • 公司为什么选择云数据库?它的魅力到底是什么!

    亚马逊云科技提供了100余种产品免费套餐。其中,计算资源Amazon EC2首年12个月免费,750小时/月;存储资源 Amazon S3 首年12个月免费,5GB标准存储容量;数据库资源 Amazon RDS 首年12个月免费,750小时;Amazon Dynamo DB 25GB存储容量 永久免费。) 谈到数据库想必我们都不陌生,其中主流

    2024年02月04日
    浏览(39)
  • 为什么越来越多公司开始用低代码开发?

    时代洪流的走向,我们无法左右,能够把握的,只有做好自己。如何在寒冬来之不易的机会中,生存并且壮大。 不知道大家有没有发现,今年的低代码赛道异常火热,但火热的背后才值得思考,市场需求持续被挖掘,是什么造就了目前诸多低代码平台的井喷? 在低代码应用

    2024年02月04日
    浏览(48)
  • 【Linux(0)】为什么要学习Linux,为什么互联网公司在招聘时,会提出要有Linux经验,及其使用;一些Linux常见指令

    💓作者简介: 加油,旭杏,目前大二,正在学习 C++ , 数据结构 等👀 💓作者主页:加油,旭杏的主页👀 ⏩本文收录在:再识C进阶的专栏👀 🚚代码仓库:旭日东升 1👀 🌹欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖        在学习完C语言后,紧接着,我们要来 学习Li

    2024年02月05日
    浏览(45)
  • 阿里云有哪些优势?为什么选择阿里云?

    为什么选择阿里云?阿里云服务器有哪些优势?阿里云全球第三,国内第一云,阿里云服务器网aliyunfuwuqi.com分享云服务器ECS在丰富ECS实例架构、弹性灵活、稳定可靠、便捷易用、安全保障和成本优化多方面优势: 阿里云服务器ECS(Elastic Compute Service)是一种产品丰富、安全可

    2024年01月17日
    浏览(58)
  • 阿里云为什么是国内第一云?有哪些优势?

    为什么选择阿里云?阿里云服务器有哪些优势?阿里云全球第三,国内第一云,阿里云服务器网aliyunfuwuqi.com分享云服务器ECS在丰富ECS实例架构、弹性灵活、稳定可靠、便捷易用、安全保障和成本优化多方面优势: 阿里云服务器ECS(Elastic Compute Service)是一种产品丰富、安全可

    2024年01月16日
    浏览(48)
  • 华为云CDN为什么成为企业首选?四大优势助力企业腾飞

    随着数字经济时代的逐步推进,越来越多的企业意识到,数字化转型的重要性,也越来越多的企业了解到,云服务和CDN对于他们的重要。而在众多的云服务平台里,华为云CDN就受到了大量用户的信任和支持,而这其实是源于华为云CDN的四大优势。   华为云CDN究竟是什么?工作

    2024年02月06日
    浏览(34)
  • 为什么现代企业都在使用ERP系统 它有哪些优势

    随着科技的不断发展,企业管理方式也在不断地发生改变。在这个信息化的时代,企业要想取得成功,必须要善于利用先进的信息化技术工具。其中, ERP系统 是企业管理中不可或缺的重要工具。本文将探讨现代企业为什么会使用ERP系统,并介绍其主要优势。 一、ERP系统的定

    2023年04月12日
    浏览(50)
  • RABBITMQ为什么要使用

    面试官问这个问题,肯定是想知道你们公司有一个什么场景需要使用到这个Mq,这个场景有一个什么技术挑战导致必须要用这个mq,用了这个mq之后有什么好处。mq经典的使用场景有 解耦,异步,削锋 。 异步通信: 当一个系统收到请求,需要在自己系统处理数据,处理完后,

    2024年02月04日
    浏览(39)
  • 【云服务器】对比传统服务器,为什么说云服务器更具优势?

    个人主页:【😊个人主页】 系列专栏:【❤️其他领域】 2006年搜索引擎大会上,“云服务器”的概念孕育而生,时至今日云服务器与传统服务器的优劣对比仍在各大论坛进行着激烈论争。但我们不可否认的是云服务器早已正式走入公众视野,渗透到了我们工作和生活的各个

    2024年02月05日
    浏览(51)
  • 消息队列选型——为什么选择RabbitMQ

    前言 MQ消息是目前分布式系统必不可少的组件,但是面对市面上众多的MQ组件,我们该用什么呢?我以实际项目的需求出发,介绍今天的主角——rabbitMQ。同时也会告知有哪些优势和不足。事不宜迟,就开始今天的学习吧 目录 一、MQ及MQ组件 1. MQ的解释与用处 2. 几款常用的M

    2024年02月11日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包