1、RabbitMQ基础

烟雨 4年前 (2021-08-03) 阅读数 438 #分布式消息队列

一、基础架构

b92a9f10-075a-4570-a4ce-e5eac4a2c7cc.png

Broker(RabbitMQ Server):接收和分发消息的应用,Broker(RabbitMQ Server)类似于MySQL服务。
Virtual host:出于多租户和安全因素设计的,把 AMQP的基本组件划分到一个虚拟的分组中,类似于网络中的 namespace 概念。当多个不同的用户使用同一个 RabbitMQ server 提供的服务时,可以划分出多个Virtual host,每个用户在自己的 Virtual host创建交换机(exchange)和队列(queue)。
Connection:生产者(publisher)/消费者(consumer) 和Broker(RabbitMQ Server)之间的 TCP长连接。
Channel:如果每一次访问 RabbitMQ 都建立一个Connection,在消息量大的时候建立Connection的开销将是巨大的,效率也较低。因此Channel 是在Connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method 包含了channel id帮助客户端和Broker(RabbitMQ Server)识别对应的channel,所以channel 之间是完全隔离的。channel 作为轻量级的Connection极大减少了操作系统建立 TCP connection 的开销。

二、工作模式

2.1、简单模式

一个生产者(Producer)、一个消费者(Consumer),不需要手动设置交换机(使用默认的交换机)。

image.png

2.2、工作队列模式

一个生产者(Producer)、多个个消费者(Consumer),不需要手动设置交换机(使用默认的交换机)。

image.png

2.3、发布订阅模式

发布订阅模式中要手动创建交换机(exchange),有3种不同类型。

2.3.1、广播模式(type:Fanout)

将消息交给所有绑定到交换机的队列。

image.png

2.3.2、Routing定向路由模式(type:Direct)

队列与交换机的绑定,要指定一个 RoutingKey(路由key)
消息的发送方向交换机发送消息时,也必须指定消息的RoutingKey
交换机不再把消息交给每一个绑定的队列,而是根据消息的RoutingKey进行判断,只有队列与消息的RoutingKey 相同,才能绑定成功。

image.png

2.3.3、Routing通配路由模式(type:Topic)

队列与交换机的绑定,要指定一个 RoutingKey(路由key)
      消息的发送方向交换机发送消息时,也必须指定消息的RoutingKey。
      交换机不再把消息交给每一个绑定的队列,而是根据消息的RoutingKey进行判断,只有队列与消息的RoutingKey满足给定的通配规则,才能绑定成功。
      通配符规则:
            # 匹配一个或多个词
            * 匹配1个词
            例如:item.# 能够匹配 item.insert.abc 或者 item.insert。
                      item.* 只能匹配 item.insert。

image.pngExchange(交换机)只负责转发消息,不具备存储消息的能力,因此如果没有任何队列与 Exchange 绑定,或者没有符合路由规则的队列,那么消息会丢失!

版权声明

非特殊说明,本文由Zender原创或收集发布,欢迎转载。

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

作者文章
热门