RabbitMQ概述

97 阅读5分钟

为什么要使用MQ

微服务架构后,链式调用是我们在写程序的时候都是基本的写法 为了这完成这一个整体功能会把它拆分成多个函数(或子模块) 比如模块 A 调用模块 B,模块 B 调用模块 C,模块 C 调用模块 D 但是大型分布式应用中,系统间的 RPC 交互复杂,一个功能后面要调用上百个接口并非不可能 从 单体 架构过渡到 分布式 微服务 架构中,这样的架构中会出现什么问题呢 当然是有的, 根据上面的几个问题,在设计系统时,就可以明确的要达到以下的几个目标能够解耦 能够削峰 能够异步

要做到系统 解耦,当新的模块进来时,可以做到代码改动最小 设置流程的缓冲池,可以让后端系统按自身吞吐能力进行消费,不被冲垮 强弱的依赖梳理,能把非关键的调用链路的操作,异步化,并提升整体系统的吞吐能力

什么是MQ

面向 消息 的中间件(message-oriented middleware0) MOM 能够很好的解决以上的问题 MQ 是指利用高效可靠的消息传递机制进行与平台无关的数据交流 并基于 数据通信 来进行分布式系统的集成 通过提供消息传递和消息排队模型在分布式环境下提供应用解耦,弹性伸缩,冗余存储,流量削峰,异步通信,数据同步等

大致流程

发送者把 消息 发送到消息服务器,消息服务器把消息存放在若干个队列或主题中,在合适的时候,消息服 务器会把消息转发给接受者,也就是消费者 在这个过程中,发送和接受是 异步 的,也就是发送无需等待,和发送者和接受者的生命周期也没有任何关系 在发布 pub / 订阅 sub模式下,也可以完成 一对多 的通信,可以让一个消息有多个接受者 微信订阅号就是这样的

MQ的特点

异步处理模式

消息发送者可以发送一个消息不需要等待响应 消息发送者把消息发送到一条虚拟的通道(主题或队列)上 消息接收者则订阅或监听该通道 一条信息可能最终转发给一个或多个消息接收者,这些接收者都无需对消息发送者做出回应 整个过程都是异步的

举个例子: 也就是说,一个系统和另一个系统之间进行通信的时候,假如系统 A 希望发送一个消息给系统B,让它去处理,但是系统 A 不关注系统 B 到底怎么处理或者有没有处理好,所以系统 A 把消息发送给 MQ,然后就不管这条消息的 死活 了,接着系统 B 从 MQ 里面消费这条消息处理即可 至于怎么处理,是否处理完毕,什么时候处理,都是系统 B 的事,与系统 A 无关

这样的一种通信方式,就是所谓的 异步 通信方式,对于系统 A 来说,只要把消息发给 MQ 然后系统 B 就会异步的去进行处理了,系统 A不能 同步 的等待系统 B 处理完 这样的好处是什么呢,当然是 解耦

应用系统的解耦

发送者和接收者不必了解对方,只需要 确认消息 发送者和接收者,可以不在同一时间在线

现实中的业务

Rabbit概述及注意点

RabbitMQ 是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件) RabbitMQ 服务器是用 Erlang 语言编写的,而集群和故障转移是构建在开放 电信 平台框架上的 所有主要的编程语言均有与代理接口通讯的客户端库

归纳一下

RabbitMQ 实现了 AMQP 协议来构建自己的消息队列 RabbitMQ 是 Erlang 语言写的,但是我们操作 RabbitMQ 的驱动是 Java 编写的

ActiveMQ和RabbitMQ的区别

ActiveMQ 他实现的是 JMS 协议(Java 消息协议) RabbitMQ 实现的是 AMQP 协议(高级消息队列协议) ActiveMQ:是 Java 写的 RabbitMQ:是 Erlang 写的,吞吐更多,延时更低! 当然:区别还有很多,你一学就知道了我就不在多说了,后面有时间我会更新好的

RabbitMQ的特点

RabbitMQ 最初起源于 金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗 具体特点如下:

可靠性

可靠性(Reliability) RabbitMQ 使用一些机制来保证消息的可靠性,如持久化、传输确认、发布确认

灵活的路由

灵活的路由(Flexible Routing) 在消息进入队列之前,通过 Exchange 来路由消息的 对于典型的路由功能,RabbitMQ 已经提供了一些内置的 Exchange 来实现 针对更复杂的路由功能,可以将多个 Exchange 绑定在一起,也能通过插件机制实现自己的 Exchange

消息集群

消息集群(Clustering) 多个 RabbitMQ 服务器可以组成一个集群,形成一个逻辑 Broker

高可用

高可用(Highly Available Queues) 队列可以在集群中的任意一台机器上进行存储,使得在部分节点出问题的情况下队列仍然可用

多种协议

多种协议(Multi-protocol) RabbitMQ 支持多种消息队列协议,比如 STOMP、MQTT 等等

多语言客户端

多语言客户端(Many Clients) RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等

管理界面

管理界面(Management UI) RabbitMQ 提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker 的许多方面

跟踪机制

跟踪机制(Tracing) 如果消息异常,RabbitMQ 提供了消息跟踪机制,使用者可以找出发生了什么

插件机制

插件机制(Plugin System) RabbitMQ 提供了许多插件,来从多方面进行扩展,也可以编写自己的插件