RabbitMQ简介
RabbitMQ是一款非常热门的消息中间件,是实现了高级消息队列协议(AMQP)的开源消息代理软件。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。它 凭借其高可靠、易扩展、高可用及丰富的功能和支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗,受到广大企业的青睐
RabbitMQ的架构模型图如下
- Producer: 生产者,就是投递消息的一方。
- Consumer: 消费者,就是接收消息的一方。
- Broker: 消息中间件的服务节点
- Queue: 队列,是RabbitMQ的内部对象,用于存储消息。
RabbitMQ的优点
- 可靠性。RabbitMQ提供了多种技术可以让你在性能和可靠性之间进行权衡。这些技术包括持久性机制、投递确认、发布者证实和高可用性机制。
- 灵活的路由。消息在到达队列前是通过交换机进行路由的。RabbitMQ为典型的路由逻辑提供了多种内置交换机类型。如果你有更复杂的路由需求,可以将这些交换机组合起来使用,你甚至可以实现自己的交换机类型,并且当做RabbitMQ的插件来使用。
- 高可用的队列。在同一个集群里,队列可以被镜像到多个机器中,以确保当其中某些硬件出现故障后,你的消息仍然安全。
- 多协议。RabbitMQ 支持多种消息协议的消息传递。
- 支持多种语言。你能想到的编程语言几乎都有与其相适配的RabbitMQ客户端。
- 可视化管理工具。RabbitMQ附带了一个易于使用的可视化管理工具,它可以帮助你监控消息代理的每一个环节。
- 追踪。如果你的消息系统有异常行为,RabbitMQ还提供了追踪的支持,让你能够发现问题所在。
RabbitMQ的缺点
- 系统复杂度提高
- 数据一致性问题
- 系统可用性降低
RabbitMQ解决了啥问题
- 削峰填谷
-
业务系统在超高并发场景中,由于后端服务来不及同步处理过多、过快的请求,可能导致请求堵塞,严重时可能由于高负荷拖垮Web服务器。我们可以使用MQ来完成部分核心逻辑,让请求堆积在MQ,web服务就可以有效的减轻压力
- 程序间解耦
-
不同的业务端在联合开发功能时,常常由于排期不同、人员调配不方便等原因导致项目延期。其实,其根本原因是业务耦合过度。在多系统的交互之间我们加上MQ,能够有效的降低耦合
- 异步处理
-
调用第三方系统的时候,由于接口可能超时的问题或者部分核心业务场景,我们可以通过MQ来拆分业务的步骤,让核心步骤在在某个步骤的时候分开执行,用户不需要长时间等待。
- 数据的最终一致性
-
最典型的是我们目前分布式系统的普遍应用之后,分布式事务的一直性上的应用。
MQ很多,选择RabbitMQ的理由是啥?
市面上有很多类型的MQ,如:RocketMQ、Kafka、ActiveMQ等,那为什么选用RabbitMQ?
- 开源、性能优秀、稳定性保障
- 提供可靠性消息投递模式(confirm)、返回模式(return)
- 集群模式丰富、表达式配置、HA(高可用)模式、镜像队列模型