当前位置: 首页 > news >正文

RabbitMQ中Exchange交换器的类型

在RabbitMQ中,Exchange(交换器)是消息路由的核心组件,它接收生产者发送的消息,并根据不同的规则将消息转发到一个或多个队列

画板

RabbitMQ主要支持以下几种类型的交换器:

1. Direct Exchange(直连交换器)

  • 路由规则:Direct Exchange根据消息的路由键(routing key)来路由消息。当消息发送到Direct Exchange时,Exchange会将消息发送到与该路由键完全匹配的队列。如果没有匹配的队列,消息将被丢弃(取决于具体配置)。
  • 适用场景:适用于需要**精确匹配**的场景。比如在一个订单处理系统中,根据订单的类型(如普通订单、其他订单)作为路由键,将不同类型的订单消息发送到对应的处理队列。

说明:

  • 生产者发送消息时,会指定一个 routing key(如 normalOrder 或 otherOrder)。
  • 队列通过 Binding Key 绑定,每个队列通过一个 binding key 绑定到 Direct Exchange。
  • 精确匹配路由,Direct Exchange 会将消息的 routing key 与队列的 binding key 进行精确匹配。只有完全匹配的队列才会收到消息。
    • normalOrder 的消息精确匹配了 binding key: normalOrder,因此被路由到Q1队列,由 Consumer_1 消费。
    • otherOrder 的消息精确匹配了 binding key: otherOrder,因此被路由到Q2队列,由 Consumer_2 消费。
    • errorLog 的消息精确匹配了 binding key: errorLog,因此被路由到Q3队列,由 Consumer_3 消费。

2. Topic Exchange(主题交换器)

  • 路由规则:Topic Exchange支持更灵活的路由匹配,它使用通配符来匹配路由键。具体来说,使用 * 匹配一个单词,# 匹配零个或多个单词。路由键是由点(.)分隔的单词序列。比如server.cpu.use 是一个有效的路由键。
  • 适用场景:适用于需要根据消息的主题进行分类路由的场景。比如在一个监控系统中,不同的监控指标(如服务器的CPU使用率、内存使用率,磁盘空间等)可以通过不同的路由键模式进行匹配,将相关消息发送到对应的处理队列。

说明:

  • 所有生产者都向同一个 Topic Exchange 发送消息
  • 队列通过包含通配符(* 匹配一个单词,# 匹配零个或多个单词)的 binding key 绑定到 Topic Exchange。
  • Exchange 将消息的 routing key 与队列的 binding key 进行模式匹配。
  • 消息分发:
    • server.cpu.usage 消息被路由到 Q1 (server.cpu.* 匹配) 和 Q2 (server.# 匹配)。
    • server.memory.high 消息被路由到 Q2 (server.# 匹配)。
    • client.log.error 消息被路由到 Q3 (*.log.error 匹配)。

3. Fanout Exchange(扇形交换器)

  • 路由规则:Fanout Exchange会将接收到的消息广播到所有与它绑定的队列,而不考虑消息的路由键。无论路由键是什么,所有绑定到该交换器的队列都会收到消息副本。
  • 适用场景:适用于广播消息的场景,例如系统通知。当有新的系统公告时,需要通知所有相关的模块,这些模块对应的队列都绑定到Fanout Exchange,从而都能收到公告消息。

说明:

  • Fanout Exchange 会将接收到的所有消息广播给所有绑定到它的队列。
  • 生产者发送消息时指定的 routing key 会被 Fanout Exchange 完全忽略。
  • 队列绑定到 Fanout Exchange 时,不需要指定 binding key(或者说,指定了也会被忽略)。
  • 同一条消息会被复制并发送到所有绑定的队列中,因此所有连接到这些队列的消费者都会收到相同的消息。

4. Headers Exchange(头部交换器)

  • 路由规则:Headers Exchange根据消息的headers属性来路由消息,而不是路由键。当消息发送到Headers Exchange时,Exchange会检查消息的headers属性,并与绑定队列时指定的headers属性进行匹配。如果匹配成功,消息将被发送到该队列。匹配规则有两种:x-match = all 表示所有指定的headers属性都必须匹配;x-match = any 表示只要有一个指定的headers属性匹配即可。
  • 适用场景:Headers Exchange相对较少使用,适用于需要根据消息的headers信息进行复杂路由的场景,比如根据消息的来源、优先级等headers属性进行路由。

说明:

在基于 Headers 路由中,消息的路由不再依赖 routing key,而是依赖消息头(Headers)中的键值对。
绑定参数 (Binding Arguments): 队列绑定到 Exchange 时,需要指定一组键值对作为匹配条件,并且必须包含一个特殊的 x-match 参数。
匹配策略 (x-match):

  • x-match=all: 消息头必须包含所有在绑定参数中指定的键,并且对应的值也要匹配。(AND 逻辑)
  • x-match=any: 消息头至少包含一个在绑定参数中指定的键,并且对应的值也要匹配。(OR 逻辑)

消息分发:

  • P1 的消息 (format=pdf, type=report) 匹配了 Q1 (需要 all) 和 Q3 (需要 any report)。
  • P2 的消息 (type=log, level=error) 仅匹配了 Q2 (需要 all log)。
  • P3 的消息 (format=jpeg, type=image) 仅匹配了 Q3 (需要 any jpeg)。

相关文章:

RabbitMQ中Exchange交换器的类型

在RabbitMQ中,Exchange(交换器)是消息路由的核心组件,它接收生产者发送的消息,并根据不同的规则将消息转发到一个或多个队列。 RabbitMQ主要支持以下几种类型的交换器: 1. Direct Exchange(直连…...

JavaSE核心知识点01基础语法01-05(字符串)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-05&#xff0…...

Vue 项目中二维码生成功能全解析

Vue 项目中二维码生成功能全解析 在信息快速传递的时代,二维码以其简洁高效的特点,成为数据交互的重要媒介。无论是用于支付、信息分享,还是活动参与,二维码都扮演着关键角色。在 Vue 项目开发中,如何实现二维码生成功…...

【AWS+Wordpress】将本地 WordPress 网站部署到AWS

前言 自学笔记,解决问题为主,亲测有效,欢迎补充。 本地开发机:macOS(Sequoia 15.0.1) 服务器:AWS EC2(Amazon Linux 2023) 目标:从本地迁移 WordPress 到云…...

性能优化-初识(C++)

性能优化-初识 一、内联与优化(Inlining and Optimization)什么是内联(inline)?使用方式:适用场景:注意事项: 二、缓存友好设计(Cache-Friendly Design)原理简…...

[人机交互]交互设计过程

*一.设计 1.1什么是设计 设计是一项创新活动,旨在为用户提供可用的产品 –交互设计是“设计交互式产品、以支持人们的生活和工作” 1.2设计包含的四个活动 – 识别用户的需要( needs )并建立需求( requirements ) …...

密码学基石:哈希、对称/非对称加密与HTTPS实践详解

密码学是现代信息安全的基石,它提供了一系列强大的数学工具和技术,用于保护数据的机密性、完整性和真实性,并确保通信双方的身份可被认证。在纷繁复杂的网络世界中,无论是安全的网页浏览 (HTTPS)、安全的软件更新、还是用户密码的…...

WebRTC通信原理与流程

1、服务器与协议相关 1.1 STUN服务器 图1.1.1 STUN服务器在通信中的位置图 1.1.1 STUN服务简介 STUN(Session Traversal Utilities for NAT,NAT会话穿越应用程序)是一种网络协议,它允许位于NAT(或多重 NAT)…...

ChromaDB调用BGE模型的两种实践方式

ChromaDB调用BGE模型 前言1.chromadb调用BGE模型api2.调用本地模型 前言 在语义搜索、知识库构建等场景中,文本向量化(Embedding)是核心技术环节。作为一款开源的向量数据库,ChromaDB允许开发者通过自定义嵌入函数灵活对接各类模…...

解构与重构:自动化测试框架的进阶认知之旅

目录 一、自动化测试的介绍 (一)自动化测试的起源与发展 (二)自动化测试的定义与目标 (三)自动化测试的适用场景 二、什么是自动化测试框架 (一)自动化测试框架的定义 &#x…...

如何巧妙解决 Too many connections 报错?

1. 背景 在日常的 MySQL 运维中,难免会出现参数设置不合理,导致 MySQL 在使用过程中出现各种各样的问题。 今天,我们就来讲解一下 MySQL 运维中一种常见的问题:最大连接数设置不合理,一旦到了业务高峰期就会出现连接…...

【卡特兰数】不同的二叉搜索树

文章目录 96. 不同的二叉搜索树解法一:动态规划状态表示状态转移方程初始化遍历顺序返回值💥解法二:卡特兰数96. 不同的二叉搜索树 96. 不同的二叉搜索树 ​ 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉…...

《饶议科学》阅读笔记

《饶议科学》 《偷窃的生物学机制:(有些)小偷有药可治》阅读笔记 核心内容:探讨偷窃狂(kleptomania)的生物学机制及相关研究。具体要点 偷窃狂的特征:患者不可抑制地反复偷窃个人不需要、与金钱…...

ShardingJdbc-公共表

ShardingJdbc-公共表 公共表 公共表属于系统中数据量小,变动少,但是却高频联合查询的表,参数表,字典表等属于此类型。可以将此类表在每个数据库中存储一份,所有更新操作将同时发送到所有分库执行。 案例 建立库 shar…...

低成本监控IPC模组概述

1、低成本sigmastar ssc335\ssc377摄像机方案,配合AI边缘计算终端即插即用,差异化AI训练及样 本采集 2、支持200万、500万H265\H264视频编码,支持网络Rtsp,Rtmp,Onvif,web,GB28181,tf卡本地录像, 视频平台接入等...

携手高校科研团队,共建TWS耳机芯片技术新生态

TWS(真无线立体声)蓝牙耳机已成为人们生活中不可或缺的一部分。而在这背后,有一家名为华芯邦的公司,其专注于TWS蓝牙仓耳机芯片的研发,并不断取得令人瞩目的突破。 一、芯片领域的实力玩家 华芯邦作为一家在芯片行业崭…...

动态规划-91.解码方法-力扣(LeetCode)

一、题目解析 将对应字符转化为数字,我们知道有的大写字母范围是在[1,9],剩下的则是[10,26],这个对应关系使我们解题的关键。 二、算法原理 1.状态表示 dp[i]表示:以i位置为结尾时,解码方法总…...

(三)Java数据类型与进制详解

一、Java数据类型概述 Java是一种强类型语言,这意味着每个变量和表达式在编译时都必须有明确的类型。Java的数据类型系统是其核心基础之一,它决定了如何存储数据、能存储什么样的数据以及能对数据执行哪些操作。 1.1 为什么需要数据类型 数据类型在编…...

用 CodyBuddy 帮我写自动化运维脚本

我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴”。 #CodeBuddy首席试玩官 背景 我个人是非常喜欢 Jenkins 自动化部署工具的,之前都是手写 Jenki…...

【Linux庖丁解牛】—程序地址空间【进程地址空间 | 虚拟地址空间】

1. 再谈空间分布图 我们之前在学C/C的时候必然学过上面的空间分布图。 可是我们对他并不理解&#xff01;这里先对其进行各区域分布验证&#xff1a; #include <stdio.h> #include <unistd.h> #include <stdlib.h> int g_unval; int g_val 100; int ma…...

nginx 上传文件,413 request entity too large

目录 1 问题2 解决 1 问题 前端后端项目&#xff0c;上传文件&#xff0c;接口没问题&#xff0c;但是就是上传不成功 &#xff0c;然后打开f12 &#xff0c;发现这个接口出现413 request entity too large 这个报错 2 解决 1.1 修改nginx配置文件 在Nginx中&#xff0c;cli…...

Nacos源码—5.Nacos配置中心实现分析二

大纲 1.关于Nacos配置中心的几个问题 2.Nacos如何整合SpringBoot读取远程配置 3.Nacos加载读取远程配置数据的源码分析 4.客户端如何感知远程配置数据的变更 5.集群架构下节点间如何同步配置数据 4.客户端如何感知远程配置数据的变更 (1)ConfigService对象使用介绍 (2)客…...

数智管理学(八)

四、未来管理学可能的新拓展方向 &#xff08;一&#xff09;人工智能与机器学习的融合形成智能决策管理职能 随着人工智能和机器学习技术的不断发展&#xff0c;它们将在管理学中得到更广泛的应用。传统决策方法难以快速处理海量数据并准确把握复杂的市场动态。人工智能与机…...

Compose Multiplatform iOS 稳定版发布:可用于生产环境,并支持 hotload

随着 Compose Multiplatform 1.8.0 的发布&#xff0c;iOS 版本也引来的第一个稳定版本&#xff0c;按照官方的原话&#xff1a;「iOS Is Stable and Production-Ready」 &#xff0c;而 1.8.0 版本&#xff0c;也让 Kotlin 和 Compose 在移动端有了完整的支持。 在 2023 年 4 …...

spark基本介绍

一、Spark概述 Spark是一种基于内存的快速、通用、可拓展的大数据分析计算引擎。 Hadoop是一个分布式系统结构的基础架构。 二、Spark与Hadoop相比较的优势&#xff1a; 1. 处理速度&#xff1a;Hadoop&#xff1a;数据处理速度相对较慢 Spark&#xff1a;速度比Hadoop快很…...

DeepSeek智能时空数据分析(九):NL2SQL绘制河流名字-如何给轨迹添加说明文字

序言&#xff1a;时空数据分析很有用&#xff0c;但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要&#xff0c;然而&#xff0c;三大挑战仍制约其发展&#xff1a;技术门槛高&#xff0c;需融合GIS理论、SQL开发与时空数据库等多领域知识&#xff1b;空…...

管家婆实用贴-如何在Excel中清除空格

我们在使用管家婆软件时&#xff0c;经常会用到Excel表格导入导出数据&#xff0c;在使用Excel整理数据时&#xff0c;数据中的空格可能会导致计算和分析出现问题。无论是多余的前导空格、尾部空格还是单元格中的不必要空格&#xff0c;清除它们都是确保数据准确性的关键。今天…...

《软件项目管理》笔记一

软件项目管理概述 项目管理属于软件工程的组成之一&#xff0c;另外两部分为&#xff1a;软件开发&#xff0c;过程改进。 参考书如下&#xff1a; 1.1 项目与软件项目 1、项目&#xff1a; 为了创造一个唯一的产品或提供一个唯一的服务而进行 的临时性的努力。 2、项目的…...

前端线上错误日志收集与定位指南

想象一下&#xff1a;你的Web应用上线后&#xff0c;用户反馈“按钮点不动”或“页面白屏”&#xff0c;但你却无从下手&#xff01;前端线上错误如JavaScript异常、网络失败&#xff0c;稍不注意就让用户流失&#xff0c;业务受损。令人抓狂的是&#xff0c;80%的错误悄无声息…...

可视化魔法指南

🎨 ECharts数据可视化魔法指南 🌟 ECharts:数据的艺术画笔 #mermaid-svg-ARwFHUrXBJ03Gpo9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-ARwFHUrXBJ03Gpo9 .error-icon{fill:#552222;}#mermaid-svg-ARwFHUr…...

使用ffmpeg截取MP3等音频片段

可以使用以下命令通过 ffmpeg 截取 MP3 音频文件的指定片段: ffmpeg的安装方法参考:linux 安装包方式安装ffmpeg,并在环境中设定或指定ffmpeg地址_linux 通过ffmpeg访问地址-CSDN博客 ffmpeg -ss [start_time] -i input.mp3 -to [end_time] -codec copy output.mp3 参数说…...

FFmpeg(7.1版本)编译生成ffplay

FFmpeg在编译的时候,没有生成ffplay,怎么办? 1. 按照上一篇文章:FFmpeg(7.1版本)在Ubuntu18.04上的编译_ffmpeg-7.1-CSDN博客 在build.sh脚本里配置了ffplay 但是,实际上却没有生成ffplay,会是什么原因呢? 2. 原因是编译ffplay的时候,需要一些依赖库 sudo apt-get i…...

CAN学习之--不使用收发器进行通讯测试

在实际调试或者学习CAN通讯过程中&#xff0c;在需要进行CAN调试的时候&#xff0c;但是手头有只有MCU的评估板&#xff0c;没有CAN的收发器&#xff0c;比如ATA6561、MCP2518这类芯片的时候&#xff0c;该怎么办呢&#xff1f; 因为我们知道&#xff0c;CAN收发器只是做信号的…...

律所项目管理全攻略:人力分配 / 案件管控 / 知识沉淀三维度解析(附专用工具清单)

引言&#xff1a;律所项目管理破局 ——从经验驱动到体系化运营 在法律服务行业数字化转型加速的背景下&#xff0c;律所项目管理能力已成为决定服务质量、客户满意度及团队效能的核心竞争力。从人力分配失衡导致的效率损耗&#xff0c;到案件流程模糊引发的客户信任危机&…...

Linux电源管理(7)_Wakeup events framework

原文链接&#xff1a;Linux电源管理(7)_Wakeup events framework 1. 前言 本文继续“Linux电源管理(6)_Generic PM之Suspend功能”中有关suspend同步以及PM wakeup的话题。这个话题&#xff0c;是近几年Linux kernel最具争议的话题之一&#xff0c;在国外Linux开发论坛&…...

Nvidia-smi 运行失败(Failed to initialize NVML: Driver/library version mismatch)

问题排查 在linux服务器上运行 nvidia-smi 命令&#xff0c;提示以下错误&#xff1a; Failed to initialize NVML: Driver/library version mismatch 首先查看内核驱动版本&#xff1a; cat /proc/driver/nvidia/version然后查看当前NVIDIA驱动版本&#xff1a; sudo dpkg …...

算法设计与分析实验题-序列对齐

基于 C 的序列最大对齐得分算法实现 在生物信息学和文本处理领域&#xff0c;序列对齐是一种常见的需求。本文将介绍如何使用 C 实现一个序列最大对齐得分算法&#xff0c;该算法可以计算两个序列在最优对齐方式下的最大得分。 问题描述 给定两个序列 S1 和 S2&#xff0c;我…...

第8章-1 查询性能优化-优化数据访问

上一篇&#xff1a;《 下一篇&#xff1a;《第7章-3 维护索引和表》》 在前面的章节中&#xff0c;我们介绍了如何设计最优的库表结构、如何建立最好的索引&#xff0c;这些对于提高性能来说是必不可少的。但这些还不够——还需要合理地设计查询。如果查询写得很糟糕&a…...

每日一题洛谷P1025 [NOIP 2001 提高组] 数的划分c++

P1025 [NOIP 2001 提高组] 数的划分 - 洛谷 (luogu.com.cn) #include<iostream> using namespace std; int n, k; int res 0; void dfs(int num,int step,int sum) {//判断if (sum n) {if (step k) {res;return;}}if (sum > n || step k)return;//搜索for (int i …...

【python】使用Python和BERT进行文本摘要:从数据预处理到模型训练与生成

《Python OpenCV从菜鸟到高手》带你进入图像处理与计算机视觉的大门! 解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 随着信息爆炸时代的到来,海量文本数据的高效处理与理解成为亟待解决的问题。文本摘要作为自然语言处理(NLP)中的关键任务,旨在自动生成…...

WHAT - Rust 智能指针

文章目录 常见的智能指针类型1. Box<T> — 堆上分配的数据2. Rc<T> — 引用计数的共享所有权&#xff08;单线程&#xff09;3. Arc<T> — 原子引用计数&#xff08;多线程&#xff09;4. RefCell<T> — 运行时可变借用&#xff08;单线程&#xff09;…...

用go从零构建写一个RPC(仿gRPC,tRPC)--- 版本1(Client端)

这里我们来实现这个RPC的client端 为了实现RPC的效果&#xff0c;我们调用的Hello方法&#xff0c;即server端的方法&#xff0c;应该是由代理来调用&#xff0c;让proxy里面封装网络请求&#xff0c;消息的发送和接受处理。而上一篇文章提到的服务端的代理已经在.rpc.go文件中…...

CentOS 安装 Zellij 终端复用器教程

CentOS 安装 Zellij 终端复用器教程 简介 Zellij 是一个现代化的终端复用器&#xff0c;使用 Rust 语言编写。它提供了类似 tmux 的功能&#xff0c;但具有更友好的用户界面和更现代化的特性。本教程将详细介绍如何在 CentOS 7.9 系统上安装 Zellij。 前置条件 CentOS 7.9 …...

基于 SpringBoot + Vue 的校园管理系统设计与实现

一、项目简介 本系统以校园组织管理为主线&#xff0c;结合用户权限分离机制与模块化设计&#xff0c;实现对“单位类别、单位、通知推送、投票信息、用户回复”等内容的全流程管理&#xff0c;广泛适用于教育局、高校及下属组织的信息管理工作。 &#x1f3af; 项目亮点&…...

如何减少锁竞争并细化锁粒度以提高 Rust 多线程程序的性能?

在并发编程中&#xff0c;锁&#xff08;Lock&#xff09;是一种常用的同步机制&#xff0c;用于保护共享数据免受多个线程同时访问造成的竞态条件&#xff08;Race Condition&#xff09;。然而&#xff0c;不合理的锁使用会导致严重的性能瓶颈&#xff0c;特别是在高并发场景…...

【人工智能agent】--dify通过mcp协议调用工具

MCP Client 发起工具调用的实体&#xff0c;也就是 Dify 工作流或 Agent。它通过 Dify 平台提供的标准化接口&#xff08;工具节点&#xff09;来请求服务。 MCP Server / Host 提供实际服务的端点。在这个例子中&#xff0c;就是模拟 API 服务器 上的各个API (/api/pump/st…...

Review --- Redis

Redis redis是什么? Redis是一个开源的,使用C语言编写的,支持网络交互的&#xff0c;key-value数据结构存储系统,支持多种语言的一种非关系型数据库,它可以用作数据库&#xff08;存储一些简单的数据&#xff0c;例如新闻点赞量&#xff09;&#xff0c;**缓存&#xff08;秒…...

Sql刷题日志(day8)

一、笔试 1、right:提取字符串右侧指定数量的字符 right(string,length) /*string&#xff1a;要操作的字符串。length&#xff1a;要从右侧提取的字符数 */ 2、curdate():返回当前日期&#xff0c;格式通常为 YYYY-MM-DD 二、面试 1、自变量是不良体验反馈&#xff0c;因…...

【Science Advances】普林斯顿大学利用非相干光打造可重构纳米光子神经网络

(导读 ) 人工智能对计算性能需求剧增&#xff0c;电子微处理器发展受功耗限制。光学计算有望解决这些问题&#xff0c;光学神经网络&#xff08;ONNs&#xff09;成为研究热点&#xff0c;但现有 ONNs 因设计缺陷&#xff0c;在图像分类任务中精度远低于现代电子神经网络&#…...

2025-05-07 Unity 网络基础8——UDP同步异步通信

文章目录 1 UDP 概述1.1 通信流程1.2 TCP 与 UDP1.3 UDP 分包1.4 UDP 黏包 2 同步通信2.1 服务端2.2 客户端2.3 测试 3 异步通信3.1 Bgin / End 方法3.2 Async 方法 1 UDP 概述 1.1 通信流程 ​ 客户端和服务端的流程如下&#xff1a; 创建套接字 Socket。用 Bind() 方法将套…...