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

RabbitMQ( 发布订阅模式 ==> DirectExchange)

本章目录:

  • 何为DirectExchange
  • DirectExchange具体使用

一、何为DirectExchange

在上一篇文章中,讲述了FanoutExchange,其中publish向交换机发送消息时,我们并没有指定routkingKey,如下图所示

我们看看官方文档

之前使用FanoutExchange的时候,我们忽略了routingkey

其实在做Binding(队列与交换机绑定)的时候,我们可以携带一个 routingkey

在使用fanoutExchange时,它只是无脑的向所有队列进行广播,不太灵活

而用directExchange时,我们可以再发送消息到交换机,时指定一个bindingkey,它只会向完全匹配bindingkey的队列发送消息

以下是模式图:

在这个图中,我们看到X(directExchange)绑定了两个queue,Q1绑定了orange,Q2绑定了black和green。

在这种模式下,发布routingKey为orange的消息到X后,该消息会被投递给Q1发布routingKey为black或者green的消息到X后,会被投递给Q2

我们为每个队列绑定相同的key,这样一来,发布routingKey为balck到X时,就达成了和Fanout一样的效果:广播 


二、 DirectExchange具体使用

在消费者服务中,编写两个方法分别监听qA和qB。

qA匹配的key:red,white 

qB匹配的key:red,yellow

    @RabbitListener(bindings = @QueueBinding(value = @Queue(name = "brrbaii.queueA"),exchange = @Exchange(name = "brrbaii.direct",type = ExchangeTypes.DIRECT),key = {"red","white"}))public void lA(String msg){System.out.println("queueA"+msg);}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "brrbaii.queueB"),exchange = @Exchange(name = "brrbaii.direct",type = ExchangeTypes.DIRECT),key = {"red","yellow"}))public void lB(String msg){System.out.println("queueB"+msg);}

在publish内发布routingKey为yellow的消息到directExchange

观察监听结果

指定key为yellow的queueB接收到了消息,且完成消费

 

在publish内发布routingKey为red的消息到directExchange

 

 

两个队列都接收到了消息并且成功消费 ,验证了"我们为每个队列绑定相同的key,这样一来,发布routingKey为balck到X时,就达成了和Fanout一样的效果:广播 "


总结

Direct交换机与Fanout交换机的差异

  • Fanout交换机将消息路由给每一个与之绑定的队列 (广播)
  • Direct交换机根据RoutingKey判断路由给哪个队列
  • 如果多个队列具有相同的RoutingKey,则与Fanout功能类似(广播)

 

 

 

 

 

 

相关文章:

RabbitMQ( 发布订阅模式 ==> DirectExchange)

本章目录: 何为DirectExchangeDirectExchange具体使用 一、何为DirectExchange 在上一篇文章中,讲述了FanoutExchange,其中publish向交换机发送消息时,我们并没有指定routkingKey,如下图所示 我们看看官方文档 之前使…...

Pytorch基础 - 5. torch.cat() 和 torch.stack()

目录 1. torch.cat(tensors, dim) 2. torch.stack(tensors, dim) 3. 两者不同 torch.cat() 和 torch.stack()常用来进行张量的拼接,在神经网络里经常用到。且前段时间有一个面试官也问到了这个知识点,虽然内容很小很细,但需要了解。 1. t…...

基于AIGC的3D场景创作引擎概述

通过改变3D场景制作流程复杂、成本高、门槛高、流动性差的现状,让商家像玩转2D一样去玩转3D,让普通消费者也能参与到3D内容创作和消费中,真正实现内容生产模式从PGC/UGC过渡到AIGC,是我们3D场景智能创作引擎一直追求的目标。 前言…...

C++算法恢复训练之快速排序

快速排序(Quick Sort)是一种基于分治思想的排序算法,它通过将待排序数组分成两个子数组,其中一个子数组的所有元素都比另一个子数组的元素小,然后对这两个子数组递归地进行排序,最终将整个数组排序。快速排…...

事务的特性

四大特性 原子性(atomicity) 事务的一系列操作,要么所有操作所有都成功,要么一个操作都不做 一致性(consistency) 指数据的规则,在事务前/后应保持一致,事务的原子性保证了一致性 隔离性&a…...

Python 计算三角形的面积、Python 阶乘实例

Python 计算三角形的面积 以下实例为通过用户输入三角形三边长度,并计算三角形的面积: # -*- coding: UTF-8 -*-# Filename : test.py # author by : www.w3cschool.cna float(input(输入三角形第一边长: )) b float(input(输入三角形第二边长: )) c …...

C++入门教程||C++ 重载运算符和重载函数||C++ 多态

C 重载运算符和重载函数 C 重载运算符和重载函数 C 允许在同一作用域中的某个函数和运算符指定多个定义,分别称为函数重载和运算符重载。 重载声明是指一个与之前已经在该作用域内声明过的函数或方法具有相同名称的声明,但是它们的参数列表和定义&…...

docker+docker-compose+nginx前后端分离项目部署

文章目录 1.安装docker1.1 基于centos的安装1.2 基于ubuntu 2.配置国内加速器2.1 配置阿里云加速器🍀 找到相应页面🍀 创建 docker 目录🍀 创建 daemon.json 文件🍀 重新加载服务配置文件🍀 重启 docker 引擎 2.2 配置…...

基于PCA与LDA的数据降维实践

基于PCA与LDA的数据降维实践 描述 数据降维(Dimension Reduction)是降低数据冗余、消除噪音数据的干扰、提取有效特征、提升模型的效率和准确性的有效途径, PCA(主成分分析)和LDA(线性判别分析&#xff0…...

【Hello Network】网络编程套接字(一)

作者:小萌新 专栏:网络 作者简介:大二学生 希望能和大家一起进步 本篇博客简介:简单介绍网络的基础概念 网络编程套接字(一) 预备知识源ip和目的ip端口号TCP和UDP协议网络中的字节序 socket编程接口socket常…...

【计算机网络】学习笔记:第二章 物理层(五千字详细配图)【王道考研】

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…...

直流有刷电机的电路分析

这里写目录标题 H桥改进后的电路L298N原理图野火的电机驱动板MOS管野火的原理图 H桥 当 Q1 和 Q4 导通时&#xff0c;电流将经过 Q1 从左往右流过电机&#xff0c;在经过 Q4 流到电源负极&#xff0c;这时图中电机可以顺时针转动。 当 Q3 和 Q2 导通时&#xff0c;电流将经过 Q…...

使用PowerShell自动部署ASP.NetCore程序到IIS

asp.net core 安装asp.net core sdk https://dotnet.microsoft.com/en-us/download/dotnet/3.1 创建asp.net core项目 dotnet new webapi运行项目 访问https://localhost:5001/WeatherForecast iis配置 安装iis 以管理员身份运行powershell Enable-WindowsOptiona…...

Elasticsearch:保留字段名称

作为 Elasticsearch 用户&#xff0c;我们从许多不同的位置收集数据。 我们使用 Logstash、Beats 和其他工具来抓取数据并将它们发送到 Elasticsearch。 有时&#xff0c;我们无法控制数据本身&#xff0c;我们需要管理数据的结构&#xff0c;甚至需要在摄取数据时处理字段名称…...

Qt 套接字类(QTcpSocket和QUdpSocket)解密:迈向 Qt 网络编程之巅

Qt 套接字类解密&#xff1a;迈向 Qt 网络编程之巅 一、套接字类简介&#xff08;Introduction to Socket Classes&#xff09;# 套接字类的作用&#xff08;Role of Socket Classes&#xff09;Qt 中常见套接字类概述&#xff08;Overview of Common Socket Classes in Qt&…...

Python视频编辑库:MoviePy

MoviePy MoviePy是一个关于视频编辑的python库,主要包括:剪辑,嵌入拼接,标题插入,视频合成(又名非线性编辑),视频处理,和自定制效果。可以看gallery中的一些实例来了解用法。MoviePy可以读写所有的音频和视频格式,包括GIF,通过python2.7+和python3可以跨平台运行于window/M…...

课程3:ASP.NET Core 身份验证 - Cookie

课程简介目录 🚀前言一、.Net Core 身份验证简介二、开启Cookie身份验证三、添加登录接口3.1 添加登录Dto3.2 添加登录接口Login3.3 获取用户信息接口,添加身份验证四、获取用户信息接口测试4.1 测试获取用户信息接口4.2 登录4.3 再次测试:获取用户信息接口4.4 其他浏览器测…...

Visual Studio 2022如何安装和使用MSDN

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;在后台收到提问&#xff0c;问我Visual Studio 2022如何安装和使用MSDN&#xff0c;这个我之前也没有在这个版本上装过MSDN&#xff0c;我之前是在Visual Studio 2017版上装过MSDN&#xff0c;那既然有人问了…...

82.qt qml-2D粒子系统、粒子方向、粒子项(一)

由于粒子系统相关的类比较多, 所以本章参考自QmlBook in chinese的粒子章节配合学习: 由于QmlBook in chinese翻译过来的文字有些比较难理解,所以本章在它的基础上做些个人理解,建议学习的小伙伴最好配合QmlBook in chinese一起学习。 1.介绍 粒子模拟的核心是粒子系统(Partic…...

引用的底层原理(汇编指令),引用与指针的联系与区别

TIPS 2. 3. 4. 引用的底层本质 在语法层面上的话&#xff0c;这个引用是不开空间的&#xff0c;相当于是对一个变量进行一个取别名的这么一个操作。在底层实现上实际是有空间的&#xff0c;因为引用是按照指针方式来实现的。然而如果你从底层的角度去看的话&#xff0c;因…...

磁盘的移臂调度算法

1、概要 访问磁盘&#xff0c;首先要找到数据&#xff0c;但机械硬盘并不是直接电子读取&#xff0c;是需要移动磁头到相应的数据块上才能读取的&#xff0c;即需要磁头移动到目标柱面(磁道)&#xff0c;然后磁片旋转使磁头能访问到相应扇区&#xff0c;进而读取到数据。 根据访…...

软考第六章 网络互连与互联网

网络互连与互联网 1.网络互连设备 组成因特网的各个网络叫做子网&#xff0c;用于连接子网的设备叫做中间系统。它的主要作用是协调各个网络的工作&#xff0c;使得跨网络的通信得以实现。 网络互连设备可以根据它们工作的协议层进行分类&#xff1a; 中继器&#xff1a;工…...

C6678-缓存和内存

C6678-缓存和内存 全局内存映射扩展内存控制器&#xff08;XMC&#xff09;-MPAX内存保护与地址扩展使用例程缓存 全局内存映射 扩展内存控制器&#xff08;XMC&#xff09;-MPAX内存保护与地址扩展 每个C66x核心都具有相同大小的L1和L2缓存&#xff0c;并且可配置为普通内存使…...

实操| 前端新人无敲代码开发APP

作为一种大型的基于GPT-3. 5结构的语言模型&#xff0c;ChatGPT由OpenAI训练&#xff0c;采用深度学习技术&#xff0c;通过大量的文本数据学习&#xff0c;可以生成类似于人类自然语言的文字。ChatGPT是一种非常强大的对话引擎&#xff0c;能进行对话、回答问题和完成任务。Ch…...

OpenCV图像处理之傅里叶变换

文章目录 OpenCV图像处理之傅里叶变换图像处理之傅里叶变换流程图OpenCv图像处理之傅里叶变换OpenCv傅里叶变换之低通滤波OpenCv傅里叶变换之高通滤波 OpenCV图像处理之傅里叶变换 傅里叶变换&#xff1a;目的就是得到图像的低频和高频&#xff0c;然后针对低频和高频进行不同…...

Docker网络案例

bridge 是什么 Docker 服务默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),该桥接网络的名称为docker0,它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络。Docker 默认指定了 docker0 接口 的 IP 地址和子网掩码,让主机…...

Java实验课的学习笔记(二)类的简单使用

本文章就讲的是很基础的类的使用 重点大概就是类的构造函数以及一些很基础的东西。 实验内容是些老生常谈的东西&#xff0c;Complex类&#xff0c;在当初学C面向对象的时候也是这个样子展开的。 内容如以下&#xff1a; public class Complex {float real;float imag;public…...

实战案例|聚焦攻击面管理,腾讯安全威胁情报守护头部券商资产安全

金融“活水”润泽千行百业&#xff0c;对金融客户来说&#xff0c;由于业务场景存在特殊性和复杂性&#xff0c;网络安全必然是一场“持久战”。如何在事前做好安全部署&#xff0c;构建威胁情报分析的防护体系至为重要&#xff0c;实现更为精准、高效的动态防御。 客户名片 …...

c++算法初级8——递推

c算法初级8——递推 文章目录 c算法初级8——递推递推递推思想的运用错位排序杨辉三角&#xff08;二维递推&#xff09; 递推 递推思想&#xff1a; 根据已有的东西一点点地推出未知的东西。 使用递推解题三步骤&#xff1a; 数学建模找出递推式和初始条件写出代码。 张爽…...

Java后端面试题 重难点和被问到没答上来的点(包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue等)

以下是我记录的一些重点问题和面试中被问到没答上来的问题&#xff0c;包括java基础、关系型数据库、Redis、计算机网络、Spring、Java多线程、vue 问题目录 1.fail-safe和fail-fast2.四引用3.explain字段重要内容4.maven三大生命周期5.MYSQL 创建修改表6.数据库三范式7.Strin…...