RabbitMQ介绍
RabbitMQ介绍
RabbitMQ 2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的 消息中间件 之一。由以高性能、健壮以及可伸缩性出名的 Erlang 写成,因此也是继承了这些优点。并且RabbitMQ是一个是一个开源的消息代理和队列服务器。
AMQP : Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
主要特性
特性 | 作用 |
---|---|
可靠性 | 提供了多种技术可以让你在 性能 和 可靠性 之间进行 权衡。这些技术包括 持久性机制、投递确认、发布者证实 和 高可用性机制; |
灵活的路由 | 消息在到达队列前是通过 交换机 进行 路由 的。RabbitMQ 为典型的路由逻辑提供了 多种内置交换机 类型。如果你有更复杂的路由需求,可以将这些交换机组合起来使用,你甚至可以实现自己的交换机类型,并且当做 RabbitMQ 的 插件 来使用; |
消息集群 | 在相同局域网中的多个 RabbitMQ 服务器可以 聚合 在一起,作为一个独立的逻辑代理来使用; |
队列高可用 | 队列可以在集群中的机器上 进行镜像,以确保在硬件问题下还保证 消息安全; |
支持多种协议 | 支持 多种消息队列协议; |
支持多种语言 | 用 Erlang 语言编写,支持只要是你能想到的 所有编程语言; |
管理界面 |
RabbitMQ 有一个易用的 用户界面,使得用户可以 监控 和 管理 消息 Broker 的许多方面; |
跟踪机制 | 如果 消息异常,RabbitMQ 提供消息跟踪机制,使用者可以找出发生了什么; |
插件机制 | 提供了许多 插件,来从多方面进行扩展,也可以编写自己的插件。 |
部署环境
RabbitMQ
可以运行在 Erlang
语言所支持的平台之上,包括:
-
Solaris
:原先是太阳微系统公司研制的类Unix操作系统,在Sun公司被Oracle并购后被称作Oracle Solaris。 -
BSD
: Berkeley Software Distribution,缩写为BSD,也被称为伯克利Unix(Berkeley Unix),是一个操作系统的名称。衍生自Unix(类Unix),1970年代由伯克利加州大学的学生比尔·乔伊(Bill Joy)开创 -
Linux
: 是一种自由和开放源代码的类UNIX操作系统。该操作系统的内核由林纳斯·托瓦兹在1991年10月5日首次发布 -
MacOSX
: 是苹果公司推出的图形用户界面操作系统,为麦金塔计算机专用,自2002年起在所有的Mac 计算机预装。 -
Windows
:Microsoft Windows(中文译作微软视窗[4][5])是微软公司推出的一系列操作系统
使用 RabbitMQ
需要:
-
ErLang
语言包 -
RabbitMQ
安装包
术语概要
- Brocker:消息队列服务器实体
- Exchange:消息交换机,指定消息按什么规则,路由到哪个队列。
- Queue:消息队列,每个消息都会被投入到一个或者多个队列里。
- Binding:绑定,它的作用是把exchange和queue按照路由规则binding起来
- Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
- Vhost:虚拟主机,一个broker里可以开设多个vhost,用作不用用户的权限分离。
- Producer:消息生产者,就是投递消息的程序。
- Consumer:消息消费者,就是接受消息的程序。
- Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务
优点
- 由于 Erlang 语言的特性,消息队列性能较好,支持 高并发;
- 健壮、稳定、易用、跨平台、支持 多种语言、文档齐全;
- 有消息 确认机制 和 持久化机制,可靠性高;
- 高度可定制的 路由;
- 管理界面 较丰富,在互联网公司也有较大规模的应用,社区活跃度高。
缺点
- 尽管结合 Erlang 语言本身的并发优势,性能较好,但是不利于做 二次开发和维护;
- 实现了 代理架构,意味着消息在发送到客户端之前可以在 中央节点 上排队。此特性使得
RabbitMQ
易于使用和部署,但是使得其 运行速度较慢,因为中央节点 增加了延迟,消息封装后 也比较大; - 需要学习 比较复杂 的 接口和协议,学习和维护成本较高。