RabbitMQ 组件和架构

软件工具
406
0
0
2022-04-14
标签   RabbitMQ

RabbitMQ 组件和架构

所有的消息都是通过 Exchange 交换机来投递给 Queue 队列的,如果有 RoutingKey,通过路由key来进行筛选,通过 bindings 和 Queue 进行绑定。Broker 就相当于是一个节点,例如在本机安装了一个 RabbitMQ 服务,那么本机就是一个 Broker,Virture Host 虚拟机节点就相当于目录,主要用户隔离和区分,可以在 页面中的 Virtual Hosts 中进行添加。

RabbitMQ 组件和架构

核心概念

Server:又称 Broker,接受客户端的连接,实现 AMQP 实体服务,安装 rabbitmq-server

Connection:连接,应用程序与Broker的网络连接 TCP/IP 三次握手和四次挥手

Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的信道,客户端可以建立对各个Channel,每个Channel代表一个会话

Message:消息,服务与应用程序之间传送的数据,由Properties和body组成,properteis可以是对消息进行修饰,比如消息的优先级,延迟等高级特性,Body则是消息体的内容

Virtual Host:虚拟地址,用户逻辑隔离,最上层的消息路由,一个虚拟机可以有若干个Ecchange和Queue,同一个虚拟主机里面不能有相同名字的Exchange

Exchange:交换机,接收消息,根据路由键发送消息到绑定到的队列(不具备消息存储能力)

Bindings:Exchange和Queue直接的虚拟连接,binding中可以保护多个routing key

Routing key:是一个路由规则,虚拟机可以用它来去定如何路由一个特定的消息

Queue:队列,也成为Message Queue,消息队列,保存消息并将它们转发给消费者

RabbitMQ 整体架构

RabbitMQ 组件和架构

RabbitMQ 运行流程

RabbitMQ 组件和架构

RabbitMQ 支持消息的模式

  • 1、简单模式

RabbitMQ 组件和架构

RabbitMQ 组件和架构

RabbitMQ 组件和架构

  • 2、工作模式 Work
分发机制

RabbitMQ 组件和架构

所有的消息都是通过 Exchange 发送到队列的

  • 3、发布订阅模式
Fanout——发布与订阅模式,是一种广播机制,它是没有路由key的模式

RabbitMQ 组件和架构

首先创建一个 fanout 类型的交换机,命名为 fanout-exchange

RabbitMQ 组件和架构

接着声明几个队列

RabbitMQ 组件和架构

默认队列绑定的都是默认的交换机,手动绑定 fanout-exchange 交换机

RabbitMQ 组件和架构

RabbitMQ 组件和架构

当然也可以直接在交换机中进行绑定

RabbitMQ 组件和架构

可以看到 queue2 已经绑定上了

RabbitMQ 组件和架构

为了演示效果,这个再创建一个绑定默认交换机的队列 queue3,接着在 fanout-exchange 交换机中发布消息

RabbitMQ 组件和架构

可以看到只有绑定了 fanout-exchange 交换机的队列收到了消息

RabbitMQ 组件和架构

  • 4、路由模式
有 routing-key 的匹配模式

RabbitMQ 组件和架构

创建 direct 类型的路由

RabbitMQ 组件和架构

绑定队列,指定路由 key

RabbitMQ 组件和架构

RabbitMQ 组件和架构

下面模拟发送消息

RabbitMQ 组件和架构

可以看到只有队列一多了一条消息

RabbitMQ 组件和架构

  • 5、主体 Topic 模式
模糊的 routing-key 的匹配模式

RabbitMQ 组件和架构

创建 topic 类型的交换机

RabbitMQ 组件和架构

绑定队列

RabbitMQ 组件和架构

RabbitMQ 组件和架构

说明:#表示0个或多个或多级,*表示1个或者多个,但是只有一级

测试:发送如下消息,可以看到只有 queue1 收到了消息

RabbitMQ 组件和架构

发送如下消息,只有 queue1 和 queue3可以收到,queue2 前面符合,但是后面不符合,*只能有一级

RabbitMQ 组件和架构

  • 6、参数模式
参数匹配模式

创建一个 headers 类型的交换机

RabbitMQ 组件和架构

绑定 queue1,添加参数为 x=1

RabbitMQ 组件和架构

测试:给参数匹配是 x=1 的队列发送消息,只有 queue1 收到了消息

RabbitMQ 组件和架构