一、RabbitMQ

简介:

RabbitMQ 是一个用 Erlang 语言开发的 AMQP 开源实现。AMQP(Advanced Message Queue Protocol),高级消息队列协议,是异步消息处理领域的一个公开标准,主要由 Cisco、RedHat 等联合制定。而 RabbitMQ 就是 AMQP 的一个开源实现,由 RabbitMQ Technologies Ltd 公司开发并提供商业支持。

RabbitMQ 主要应用于大型系统中不同的应用或者子系统之间的通信,通过分隔数据的发送和接收来解耦应用。

一条消息的“一生”

在对 RabbitMQ 进行更进一步的介绍之前,先让我们来看一看在 RabbitMQ 中,一条消息,从生产者到消费者完整的轨迹。

当生产者发布一条消息时,首先跟 RabbitMQ 建立连接(channel),通过该连接将想要发布的消息发送到交换器(exchange)上。交换器通过特定的路由规则(routing_key),将消息发送到某个队列(queue)。RabbitMQ 会监控该队列,一旦发现有消费者订阅了该队列,就将消息发送给消费者进行处理,然后将该消息从队列中删除。

需要注意的是,这里提到的生产者和消费者只是消息发送和接收的概念体现,每个客户端都可以是消费者或生产者。

接下来,对上面涉及到的一些重要的概念进行进一步的介绍。

MQ定义:

消息队列的目的是为了实现各个APP之间的通讯,APP基于MO实现消息的发送和接收实现应用程序之间的通讯,这样多个应用程序可以运行在不同的主机上,通过MQ就可以实现夸网络通信,因此MQ实现了业务的解唿和异步机制。

MQ使用场合:

消息队列作为高并发系统的核心组件之一,能够帮助业务系统结构提升开发效率和系统稳定性,消息队列主要具有以下特点:,

削峰填谷(主要解决瞬时写压力大于应用服务器导致消息丢失,系统崩溃等问题)

系统解耦(解决不同重要程度,不同的能力级别系统之间依赖导致一死全死的现象)

提升性能(当存在一对多调用时,可以发一条消息给消息系统,让消息系统通知相关服务)

蓄流压测(线上有些链路不好压测,可以堆积一定量消息再放开来压测)

MQ分类:

目前主流的消息队列软件有RabbitMQ、kafka、ActiveMQ、RocketMQ等,还有小众的消息队列软件如zeroMQ、Apache Qpid等。

 

 

 一、RabbitMQ :

官方地址: https://www.rabbitmq.com/
官方地址: https://www.erlang.org/

 

 

 

1、Broker(服务端):MQ 中最核心的部分,是 MQ 的服务端,核心逻辑几乎全在这里,它为生产者和消费者提供 RPC 接口,负责消息的存储、备份和删除,以及消费关系的维护等。
2、Producer(生产者):MQ 的客户端之一,调用 Broker 提供的 RPC 接口发送消息。
3、Consumer(消费者):MQ 的另外一个客户端,调用 Broker 提供的 RPC 接口接收消息,同时完成消费确认。
4、Broker:接收和分发消息的应用,RabbitMQ Server 就是Message Broker。
5、Exchange: message到达 broker的第一站,根据分发规则,匹配查询表中的routingkey,分发消息到queue中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout (multicast)。
6、Virtual host: 出于多租户和安全因素设计的,把 AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念,当多个不同的用户使用同一个RabbitMQserver提供的服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange / queue等。
7、Queue:消息最终被送到这里等待consumer 取走。
8、Binding: exchange和 queue 之间的虚拟连接,binding中可以包含routing key。Binding信息被保存到exchange 中的查询表中,用于message的分发依据。
 
 
 
 
 
posted @ 2021-09-11 16:45  被遗忘的记忆  阅读(103)  评论(0)    收藏  举报