D2_基本介绍

目录

一、简介

二、作用

三、AMQP协议

1. 简介

2. 核心概念

四、工作原理

五、工作模式

1. 普通模式

2. Worker模式

3. PubSub模式

4. Rounting模式

5. Topic模式

6. RPC模式

7. Publisher Confirms模式

六、基本结构

七、常见五个角色


一、简介

RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现。

最初起源于金融系统,适用于对数据的一致性、稳定性和可靠性要求比较高的场景。

二、作用

缓解高并发场景的压力;对流量进行削峰;实现解耦;提高系统的可靠性

三、AMQP协议

1. 简介

AMQP高级消息队列协议(Advanced Message Queueing Protocol),是面向消息的中间件的开

放标准应用层协议,AMQP的特征是消息导向,排队,路由(包括点对点和发布和订阅),可靠性

和安全性。

AMQP要求消息传递提供商和客户端的行为在不同供应商实现可互操作的情况下,以与SMTP,

HTTP,FTP等相同的方式创建了可互操作的系统。

AMQP协议是具有现代特征的二进制协议。一个提供统一消息服务的应用层标准高级消息队列协

议,是应用层协议的一个开发标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件

可传递消息,并不受客户端/中间件不同产品,不同开发语言等条件的限制。

AMQP是一种二进制应用层协议,旨在有效地支持各种消息应用和通信模式。

2. 核心概念

AMQP协议模型

1、Server

又称作Broker,用于接受客户端的连接,实现AMQP实体服务;

2、Connection

连接,应用程序与Broker的网络连接;

3、Channel

网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立

多个Channel,每个Channel代表一个会话任务;

3、Message

消息,服务器和应用程序之间传送的数据,有Properties和Body组成。Properties可以对消息进行

修饰,比如消息的优先级、延迟等高级特性;Body则是消息体内容,即我们要传输的数据;

仅仅创建了客户端到Broker之间的连接后,客户端还是不能发送消息的。需要为每一个Connection

创建Channel,AMQP协议规定只有通过Channel才能执行AMQP的命令。一个Connection可以包

含多个Channel。之所以需要Channel,是因为TCP连接的建立和释放都是十分昂贵的,如果一个

客户端每一个线程都需要与Broker交互,如果每一个线程都建立一个TCP连接,暂且不考虑TCP

连接是否浪费,就算操作系统也无法承受每秒建立如此多的TCP连接。RabbitMQ建议客户端线程

之间不要共用Channel,至少要保证共用Channel的线程发送消息必须是串行的,但是建议尽量共

用Connection。

4、Virtual Host

虚拟地址,是一个逻辑概念,用于进行逻辑隔离,是最上层的消息路由。一个Virtual Host里面可

以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange或者Queue;

Virtual Host是权限控制的最小粒度;

5、Exchange

交换机,用于接收消息,可根据路由键将消息转发到绑定的队列;

6、Binding:

Exchange和Queue之间的虚拟连接,Exchange在与多个Message Queue发生Binding后会生成一

张路由表,路由表中存储着Message Queue所需消息的限制条件即Binding Key。当Exchange收到

Message时会解析其Header得到Routing Key,Exchange根据Routing Key与Exchange Type将

Message路由到Message Queue。Binding Key由Consumer在BindingExchange与Message

Queue时指定,而Routing Key由Producer发送Message时指定,两者的匹配方式由Exchange

Type决定

7、Routing Key:

一个路由规则,虚拟机可用它来确定如何路由一个特定的消息;

8、Queue:

也称作Message Queue,即消息队列,用于保存消息并将他们转发给消费者;

RabbitMQ整体架构图

四、工作原理

Broker:接收和分发消息的应用,RabbitMQ Server 就是 Message Broker

Virtual host:出于多租户和安全因素设计的,把 AMQP 的基本组件划分到一个虚 拟的分组中,类

似于网络中的namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,

可以划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等

Connection:publisher/consumer 和 broker 之间的 TCP 连接

Channel:如果每一次访问 RabbitMQ 都建立一个 Connection,在消息量大的时候 建立 TCP

Connection 的开销将是巨大的,效率也较低。Channel 是在 connection 内部建立的逻辑连接,如

果应用程序支持多线程,通常每个 thread 创 建单独的 channel 进行通讯,AMQP method 包含了

channel id 帮助客户端和 message broker 识别 channel,所以 channel 之间是完全隔离的。

Channel 作为轻 量级的Connection 极大减少了操作系统建立 TCP connection 的开销

Exchange:message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发

消息到queue 中去。常用的类型有:direct (point-to-point), topic (publish-subscribe) and fanout

(multicast)

Queue:消息最终被送到这里等待 consumer 取走

Binding:exchange 和queue 之间的虚拟连接,binding 中可以包含 routing key, Binding 信息被

保存到exchange 中的查询表中,用于 message 的分发依据

简单来说:

1、生产者发送消息到MQ交换机

2、交换机根据定义的绑定规则和传过来的key将消息放到不同队列中

3、消费者从队列中取出消息进行消费

五、工作模式

让我们看看官网:RabbitMQ tutorial - "Hello World!" | RabbitMQ

经过官网文档介绍,我们知道RabbitMQ的工作模式有七种

Hello Wold 简单模式/普通模式

Work queues 工作队列模式

Publish/Subscribe 发布订阅模式

Routing 路由模式

Topics 主题模式

RPC 远程调用模式

Publisher Confirms 发布确认模式

1. 普通模式

2. Worker模式

类似于RocketMQ集群模式,发送消息只有一个消费者去消费。prefetchCount默认预取250个

消息,可以在配置文件中配置预取消息数量,实现各个节点多劳多得。消费速度快的就可以消费更

多的消息。

spring.rabbitmq.listener.simple.prefetch=自定义预取数量

3. PubSub模式

类似于RocketMQ广播模式,所有消费者都会收到消息。

生产者需要指定交换机,不需要指定队列。type ="fanout"

4. Rounting模式

根据指定的交换机及路由key来发送消息,

即消费者绑定了与生产者发布的消息相同的路由key时才可以收到消息。

5. Topic模式

Rounting模式的一种,交换机根据key的规则模糊匹配到对应的队列,由队列的监听消费者接收消息

消费

6. RPC模式

远程过程调用RPC

7. Publisher Confirms模式

六、基本结构

七、常见五个角色

  • publisher:生产者
  • consumer:消费者
  • exchange:交换机,负责消息路由
  • queue:队列,存储消息
  • virtualHost:虚拟主机,隔离不同用户的exchange、queue、消息的隔离
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingW丨编程之路

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值