3.RabbitMQ 架构以及 通信方式

news2025/2/25 18:47:10

一、RabbitMQ的架构

RabbitMQ的架构可以查看官方地址
在这里插入图片描述
在这里插入图片描述
可以看出RabbitMQ中主要分为三个角色:

  • Publisher:消息的发布者,将消息发布到RabbitMQ中的Exchange
  • RabbitMQ服务:Exchange接收Publisher的消息,并且根据Routes策略将消息转发到Queue中
  • Consumer:消息的消费者,监听Queue中的消息并进行消费
  • Routes:就是我们下面说的 Routing Key

RabbitMQ发送消息的策略是,消息到达Exchange,然后根据 RoutingKey 去配置到 Queue,然后消费者监听queue来完成消费

二、AMQP概念

RabbitMq是基于AMQP协议的。

1.什么是AMQP协议

在这里插入图片描述

  1. server:又称Broker,接收客户端连接,实现AMQP实体服务
  2. Connection: 连接,应用程序与Broker的网络连接
  3. Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
  4. Virtual Host :虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual host里面可以有若干个Exchange和Queue,同一个Virtual host 里面不能有相同名称的Exchange或Queue,可以理解为 Mysql中的 db概念,不同的用户可以管理不同的 Virtual Host,默认是 / 目录,也可以在 管理页面上 创建 Virtual Host 并指定给相应的用户,或者在命令行中创建和设置用户。
  5. ExChange:交换机,接收消息,根据路由键转发消息到绑定的队列
  6. Binding:Exchange和Queue之间的虚拟连接,binding中可以包含routing key(路由键)
  7. Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息
  8. Queue:也称为Message Queue,消息队列,保存消息并将它们转发给消费者
  9. Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成,Properties可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body则就是消息体内容

二、ExChange详解

  1. Name:交换机名称
  2. Type:RabbitMQ中交换机的类型有 direct(直接) 、topic(主题)、fanout(广播)、headers(标题)
  3. Durability:交换机是否需要持久化,true为持久化。
  4. Auto Delete:当最好一个绑定到Exchange上的队列删除后,自动删除Exchange。
  5. Internal:当前Exchange是否用于RabbitMQ内部使用,默认False
  6. Arguments:扩展参数,用户扩展AMQP协议自制定化使用

三、Queue详解

  1. name:队列的名称
  2. durable:是否是持久化队列
  3. autoDelete:当最后一个消息不在了,是否自动删除队列,默认false。

三、RabbitMQ通讯的方式

RabbitMQ通讯方式 是依赖于 Exchange的类型的。

3.1 direct类型交换机

所有发送到Direct Exchange的消息被转发到RouteKey中指定的Queue

注意:Direct模式可以使用RabbitMQ自带的Exchange:default Exchange,所以不需要将Exchange进行任何绑定操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃

注意:Direct模式可以使用RabbitMQ自带的Exchange:default
Exchange,所以不需要将Exchange进行任何绑定操作,消息传递时,RouteKey必须完全匹配才会被队列接收,否则该消息会被抛弃

在这里插入图片描述

3.2 fanout类型交换机

  1. 不处理Routing Key,只需要简单的将队列绑定到交换机上
  2. 发送到交换机的消息都会被转发到与该交换机绑定的所有队列上
  3. Fanout交换机转发消息是最快的
    在这里插入图片描述

3.3 topic类型交换机

所有发送到Topic Exchange的消息被转发到所有关心RouteKey中指定Topic的Queue上

Exchange将RouteKey和某个Topic进行模糊匹配,此时队列需要绑定一个Topic

注意:可以使用通配符进行模糊匹配

  • 符号 # 匹配一个或多个词
  • 符号 * 只匹配一个词
  • 例如:log.# 能够匹配到 log.info.a、log.info.c、log.info
  • log.* 只能匹配到 log.info 。

在这里插入图片描述

3.4 headers类型交换机

上面的三种都是通过 Routing Key来进行匹配的,而headers是通过消息的header来进行匹配的。
在这里插入图片描述
headers头部的 x-match 参数是 必须的,如果x-match设置的是all,那么生产者在生产消息时必须满足设置的headers条件,
我上面设置的是 x-match=all ,name=jack,age=23,那么我想发送消息到这个队列里面,那么消息头必须要有 name=jack,age=23。
如果我设置的是 x-match=any ,那么我满足其中一个条件就好了,比如上面是 name = jack,age= 23,那么我消息头带其中的一个就可以了,也就是他们两个的任意一个。
如果不满足的话,消息无法到达exchange绑定的queue中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/926524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle跨库访问DBLINK

1. DBLINK的介绍 Oracle在进行跨库访问时,可以创建DBLINK实现,比如要将UAT的表数据灌入开发环境,则可以使用UAT库为数据源,通过DBLINK实现将查出的数据灌入开发库。 简而言之就是在当前数据库中访问另一个数据库中的表中的数据 2…

企业批量寄件打单教程

快递行业的发展,为企业因公寄件带来便利性的同时,企业对快递的依赖也为了快递公司带来一定的业务量,然后间接帮助企业再去提升自己的服务质量。为什么这么说呢?企业因公寄件,能为快递公司贡献一定寄件量,而…

解决redis-server.exe不是内部或外部命令

报错:redis-server.exe不是内部或外部命令 原因:未进入到redis的安装目录下 解决:先找到redis安装路径,复制之后,在终端中输入cd xxxxx(redis的安装路径),进入安装目录之后再次输入redis-server.exe就成功了…

vue-element-admin最新版4.4实现多个url路由匹配到一个路径时,左侧菜单保持高亮状态

文章目录 环境:需求:原因分析:如何解决: 环境: vue-admin-template-4.4版本(vue2) 需求: 当我访问申请开户时,也希望支付菜单能保持高亮状态。 原因分析: …

LeetCode--HOT100题(40)

目录 题目描述:543. 二叉树的直径(简单)题目接口解题思路代码 PS: 题目描述:543. 二叉树的直径(简单) 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最…

智商测试题目(看有几个人能看懂)

上面是宏定义,下面是算法实现 小伙伴,你能看懂吗?

2023国赛数学建模思路 - 案例:退火算法

文章目录 1 退火算法原理1.1 物理背景1.2 背后的数学模型 2 退火算法实现2.1 算法流程2.2算法实现 建模资料 ## 0 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 1 退火算法原理 1.1 物理背景 在热力学上&a…

【【Verilog典型电路设计之CORDIC算法的Verilog HDL 实现】】

Verilog典型电路设计之CORDIC算法的Verilog HDL 实现 典型电路设计之CORDIC算法的Verilog HDL 实现 坐标旋转数字计算机CORDIC(Coordinate Rotation Digital Computer)算法,通过移位和加减运算,能递归计算常用函数值,如sin,cos,…

Qt 阴影边框

阴影边框很常见,诸如360以及其他很多软件都有类似效果,了解CSS3的同学们应该都知道box-shadow,它就是来设定阴影效果的,那么Qt呢?看过一些资料,说是QSS是基于CSS2的,既然如此,box-sh…

【附安装包】hyperMILL2018安装教程

软件下载 软件:hyperMILL版本:2018语言:简体中文大小:4.54G安装环境:Win11/Win10/Win8/Win7硬件要求:CPU2.0GHz 内存4G(或更高)下载通道①百度网盘丨64位下载链接:https://pan.baid…

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)

时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比) 目录 时序预测 | MATLAB实现PSO-KELM粒子群算法优化核极限学习机时间序列预测(含KELM、ELM等对比)预测效果基本介绍模型介绍程序设计参…

笔试强训选择题错误总结

图文版md文件已上传 1..已知如下类定义:class Base { public Base (){ //... } public Base ( int m ){ //... } public void fun( int n ){ //... } } public class Child extends Base{ // member methods } 如下哪句可以正确地加入子类中? A privat…

AI驱动下的智能制造:工业自动化的新纪元

随着人工智能(AI)技术的持续进步,其在工业自动化领域的影响日益显著。作为现代科技的代表,AI不仅为各行业带来了前所未有的商机和技术思路,更在工业自动化领域中引发了一场深刻的变革。本文将深入探讨AI对智能制造的影…

IDEA创建Servlet(Web)项目完整教程-2023,并配置tomcat的端口号,以及默认打开的浏览器

文章目录 1. 文章引言2. 创建servlet项目3. 总结 1. 文章引言 今天,粉丝问我一个问题,如下图所示: 他是jsp servlet项目,但启动后,无论如何都无法访问,于是向我咨询如何解决该问题。 我解决了一系列的问…

AMBA总线协议(10)——APB

一、前言 在之前的文章中,我们详细地介绍了AHB的相关内容,在这篇文章里我们会开始APB总线的学习,由于APB总线协议的内容真的非常少(手册才34页,比起那些动辄成百上千页的手册来说真的太友好啦),…

【Terraform学习】使用 Terraform 创建应用程序负载均衡器(Terraform-AWS最佳实战学习)

使用 Terraform 创建应用程序负载均衡器 实验步骤 前提条件 安装 Terraform: 地址 下载仓库代码模版 本实验代码位于 task_elb 文件夹中。 变量文件 variables.tf 在上面的代码中,您将声明,aws_access_key,aws_secret_key…

Visio

Visio 简介Office Tool Plus教程 简介 Visio(Microsoft Visio)是微软公司开发的一款流程图和图表绘制软件。它主要用于创建各种类型的图表、流程图、组织结构图、平面图、网络图等,以帮助用户可视化和呈现复杂的信息、流程和关系。 Office …

智信数科SMS短信平台安装教程

智信SMS客户端下载 使用智信SMS短信平台前,需要前往公司官网或者百度网盘共享地址下载最新版本的短信平台。 下载地址一:公司官网 下载地址二:百度网盘共享(推荐) 智信SMS客户端安装 安装前,确保您已经正…

抖音seo短视频矩阵系统源码开发源代码分享--开源-可二开

适用于抖音短视频seo矩阵系统,抖音矩阵系统源码,短视频seo矩阵系统源码,短视频矩阵源码开发,支持二次开发,开源定制,招商加盟SaaS研发等。 功能开发设计 1. AI视频批量剪辑(文字转语音&#x…

Node基础--Node中的文件系统

我们学习了npm,这是Node中使用很频繁且重要的内容,下面一起来看看Node中的文件系统。 1.buffer缓冲区 (1).概述 从结构上看Buffer非常像一个数组,我们知道在javaScript中,数组是一个比较强大的内容。但是这里也存在着一个比较大的问题,如果你需要存在一张图,这一个时候需…