最全面透彻的RabbitMQ指南

本文详细介绍了RabbitMQ的历史、应用场景、系统架构和基本概念,包括Exchange、Queue、Binding等核心概念。RabbitMQ作为AMQP协议的开源实现,解决了大型软件系统中模块间异步通信的问题,提供了高效、可靠的消息传递服务。文章还讨论了Message acknowledgment、负载均衡和队列管理等关键特性,适合开发者深入理解RabbitMQ的工作原理和使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文大纲

  1. RabbitMQ 历史
  2. RabbitMQ 应用场景
  3. RabbitMQ 系统架构
  4. RabbitMQ 基本概念
  5. RabbitMQ 细节阐明

历史-从开始到现在

RabbitMQ是一个Erlang开发的AMQP(Advanced Message Queuing Protocol )的开源实现。AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有很多公开标准(如 Cobar)的 IIOP ,或者是 SOAP 等),但是在异步消息处理中却不是这样,只有大企业有一些商业实现(如微软的 MSMQ ,IBM 的 WebSphere MQ 等),因此,在 2006 年的 6 月,Cisco 、Red Hat、iMatix 等联合制定了 AMQP 的公开标准。

RabbitMQ由RabbitMQ Technologies Ltd开发并且提供商业支持的。该公司在2010年4月被SpringSource(VMware的一个部门)收购。在2013年5月被并入Pivotal。其实VMware,Pivotal和EMC本质上是一家的。不同的是,VMware是独立上市子公司,而Pivotal是整合了EMC的某些资源,现在并没有上市。

RabbitMQ官网:http://www.rabbitmq.com

一、应用场景

言归正传。RabbitMQ,或者说AMQP解决了什么问题,或者说它的应用场景是什么?

对于一个大型的软件系统来说,它会有很多的组件或者说模块,又或者说子系统。那这些模块又如何通信?这和传统的IPC有很大的区别。传统的IPC很多都是在单一系统上的,模块耦合性很大,不适合扩展(Scalability)。如果使用Socket,那么不同的模块的确可以部署到不同的机器上,但是还是有很多问题需要解决。比如:

  • 信息的发送者和接收者如何维持这个连接,如果一方的连接中断,这期间的数据是以什么方式丢失?
  • 如何降低发送者和接收者的耦合度?
  • 如何让Priority高的接收者先接到数据?
  • 如何做到Load Balance?有效均衡接收者的负载?
  • 如何有效的将数据发送到相关的接收者?也就是说将接收者subscribe 不同的数据,如何做有效的filter。
  • 如何做到可扩展,甚至将这个通信模块发到cluster上?
  • 如何保证接收者接收到了完整,正确的数据?

AMQP协议解决了以上的问题,而RabbitMQ实现了AMQP。

二、系统架构

RabbitMQ消息模型

RabbitMQ Server

也叫Broker Server,它不是运送食物的卡车,而是一种传输服务。原话是RabbitMQ isn't a food truck, it's a delivery service. 它的角色就是维护一条从Producer到Consumer的路线,保证数据能够按照指定的方式进行传输。虽然这个保证也不是100%的保证,但是对于普通的应用来说这已经足够了。当然对于商业系统来说,可以再做一层数据一致性的guard,就可以彻底保证系统的一致性了。

Client P

也叫Producer,数据的发送方。Create messages and publish (send) them to a Broker Server (RabbitMQ)。一个Message有两个部分:payload(有效载荷)和label(标签)。payload顾名思义就是传输的数据。label是exchange的名字或者说是一个tag,它描述了payload,而且RabbitMQ也是通过这个label来决定把这个Message发给哪个Consumer。AMQP仅仅描述了label,而RabbitMQ决定了如何使用这个label的规则。

Client C

也叫Consumer,数据的接收方。Consumers attach to a Broker Server (RabbitMQ) and subscribe to a queue。把queue比作是一个有名字的邮箱。当有Message到达某个邮箱后,RabbitMQ把它发送给它的某个订阅者即Consumer。当然可能会把同一个Message发送给很多的Consumer。在这个Message中,只有payload,label已经被删掉了。对于Consumer来说,它是不知道谁发送的这个信息的,就是协议本身不支持。当然了,如果Producer发送的payload包含了Producer的信息就另当别论了。

对于一个数据从Producer到Consumer的正确传递,还有三个概念需要明确:exchanges, queues and bindings。

  • Exchanges are where producers publish t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值