浅谈 RabbitMQ(一)工作模型与 Exchange 类型

为什么要使用MQ

异步

同步请求与响应方式:服务A请求服务B,在得到响应结果前,服务A必须阻塞等待,极大影响了吞吐量(TPS)

image

服务异步请求方式:服务A发起请求,然后进行其它任务,收到服务B的响应后继续进行相应的业务

image

解耦

多个服务之间通过MQ传输消息,减少耦合性

image

削峰

大量的请求如果直接访问服务,会导致服务宕机等问题,使用MQ可达到缓冲削峰的作用

image

RabbitMQ工作模型

基于AMQP(高级消息队列协议),可跨平台

image

Message

消息:即服务间传输的数据

Producer

消息生产(提供)者:向交换机发送消息的服务

Exchange

交换机:接收消息生产者发送的消息并路由转发给队列

Binding

绑定:交换机和队列的一种关联形式,一个绑定可以理解为匹配一个队列的规则

Queue

队列:保存消息并发送给消费者,存储消息的容器,一个消息可以发送给多个队列

Connection

网络连接:比如TCP连接(长连接)

Channel

信道:数据流通道,TCP长连接的开启与销毁都是非常昂贵的资源消耗,通过通道可以达到多路复用的作用(底层NIO

Broker

主机:真正的消息队列服务实体

Consumer

消费者:从消息队列中获取消息并使用

VHost(Virtual Host)

虚拟主机:一批交换机、队列和绑定等的组合,可以理解为一个mini版的RabbitMQ,实现在同一个MQ中的资源隔离(类似于容器化)。连接时必须指定VHost,默认的VHost"/"

Exchange路由类型

消息提供者将消息发送给Exchange路由(转发)给各个Queue

Direct Exchange(直连)

直连类型:使用Binding KeyQueue绑定到Direct Exchange,消息提供者发送消息时使用Routing Key发送到指定的交换机,交换机转发给对应的Queue,消费者通过监听相应的Queue获取并消费消息。

image

依据上图的规则举个栗子:

  • Routing Key=queue_A时,消息会发送到QueueA队列;
  • Routing Key=queue_B时,消息会发送到QueueB队列;
  • Routing Key=queue_C时,消息会发送到QueueC队列。

Topic Exchange(主题)

最灵活的类型,Binding Key可以使用通配符限定Routing Key

# 表示匹配0个或多个单词
* 表示只能匹配1个单词
. 起到在Binding Key分隔单词的作用, 用于通配符的匹配规则

主题类型:使用Binding Key将消息转发给多个Queue

image

依据上图的规则举个栗子:

  • Routing Key=netty.first时,消息会发送到QueueA队列;
  • Routing Key=netty.first.second时,消息会发送到QueueA队列;
  • Routing Key=tomcat.first时,消息会发送到QueueB队列;
  • Routing Key=first.mysql时,消息会发送到QueueC队列;
  • Routing Key=first.second.mysql时,消息会发送到QueueC队列;

Fanout Exchange(广播)

广播类型没有Binding KeyRouting Key

广播类型:消息提供者将消息发送给Fanout Exchange后会转发给绑定到Fanout Exchange上的所有Queue

image

依据上图的规则举个栗子:

  • 当消息发送给广播类型的交换机后,所有绑定到该交换机的队列(QueueAQueueBQueueC)都将收到此消息
posted @ 2021-08-12 16:17  超级鲨鱼辣椒  阅读(76)  评论(0编辑  收藏  举报