RabbitMQ的介绍

为什么使用 MQ?

  1. 流量削峰和缓冲

    如果订单系统最多能处理一万次订单,这个处理能力在足够应付正常时段的下单,但是在高峰期,可能会有两万次下单操作,订单系统只能处理一万次下单操作,剩下的一万次被阻塞。我们可以使用消息队列做缓冲,取消这个限制,把一秒内下的订单分散成一段时间来处理,减少了系统的压力,增强了用户的体验效果。

  2. 应用解耦

    不同的应用程序可以通过消息队列的方式解耦,生产者和消费者之间不需要直接相互通信,而是通过共享的消息队列进行通信。应用解耦使系统更灵活。

  3. 异步处理

    在秒杀任务中,大量用户下单时,将订单信息和库存信息保存在缓存中,之后使用消息队列的更改数据库中的数据。

几种MQ的对比:

RabbitMQ ActiveMQ RocketMQ Kafka
公司/社区 Rabbit Apache 阿里 Apache
开发语言 Erlang Java Java Scala&Java
协议支持 AMQP,XMPP,SMTP,STOMP OpenWire,STOMP,REST,XMPP,AMQP 自定义协议 自定义协议
可用性 一般
单机吞吐量 一般 非常高
消息延迟 微秒级 毫秒级 毫秒级 毫秒以内
消息可靠性 一般 一般

追求可用性:Kafka、 RocketMQ 、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

RabbitMQ

四个概念:

  • Publisher:生产者,也就是要发送消息的程序,但是不再发送到队列中,而是发给交换机
  • Exchange:交换机。一方面,接收生产者发送的消息。另一方面,知道如何处理消息,例如递交给某个特别队列、递交给所有队列、或是将消息丢弃。到底如何操作,取决于Exchange的类型。Exchange有以下3种类型:
    • Fanout:广播,将消息交给所有绑定到交换机的队列
    • Direct:定向,把消息交给符合指定routing key 的队列
    • Topic:通配符,把消息交给符合routing pattern(路由模式) 的队列
  • Consumer:消费者,与以前一样,订阅队列,没有变化
  • Queue:消息队列也与以前一样,接收消息、缓存消息。

Exchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与Exchange绑定,或者没有符合路由规则的队列,那么消息会丢失!

工作原理

  • Broker:
    接收和分发消息的应用,RabbitMQ Server 就是 Message Broker
  • Virtual host
    出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚拟的分组中,类似 于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出 多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等,实现不同服务之间的隔离。
  • Connection
    publisher/consumer 和 broker 之间的 TCP 连接。
  • Channel
    如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候建立 TCP Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如果应用程 序支持多线程,通常每个 thread 创建单独的 channel 进行通讯,AMQP method 包含了 channel id 帮助客 户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。Channel 作为轻量级的 Connection 极大减少了操作系统建立 TCP connection 的开销。
相关推荐
无名-CODING2 小时前
Java 爬虫高级技术:反反爬策略与分布式爬虫实战
java·分布式·爬虫
8Qi83 小时前
Redis哨兵模式(Sentinel)深度解析
java·数据库·redis·分布式·缓存·sentinel
爱学习的程序媛3 小时前
JWT签发全指南:从原理到安全实践
分布式·安全·web安全·安全架构·jwt签发·无状态认证
wanhengidc5 小时前
徐州服务器租用的优势
大数据·运维·服务器·分布式·智能手机
wanzehongsheng5 小时前
分布式光伏电站的技术优势与智能运维实践:以WZ HELIO²双轴跟踪系统为例
运维·分布式
爱浦路 IPLOOK5 小时前
分布式UPF架构:让低时延与大带宽不再是难题
分布式·架构
rafael(一只小鱼)5 小时前
如何解决报错wmic不是内部或外部命令--kafka场景下
windows·分布式·kafka
传感器与混合集成电路5 小时前
长效监测体系的构建:工艺、装备与数据能力
分布式
zhangshuang-peta6 小时前
MCP 会不会成为 AI 系统的“新中间件”?
人工智能·中间件·ai agent·mcp·peta
风吹落叶32576 小时前
RabbitMQ 集群
linux·分布式·rabbitmq