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

RabbitMQ 入门(六)SpringAMQP五种消息类型(Direct Exchange)

一、发布订阅-DirectExchange(路由模式)

        在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。

        Direct Exchange 会将接收到的消息根据规则路由到指定queue,因此称为路由模式(routes)。

       - 每一个Queue都与Exchange设置一个BindingKey
       - 发布者发送消息时,指定消息的RoutingKey
       - Exchange将消息路由到BindingKey与消息RoutingKey一致的队列;
       - 一个Queue可以绑定多个BindingKey,也就是说Direct Exchange可以模拟Fanout但是比Fanout灵活。


 在Direct模型下:

- 队列与交换机的绑定,不能是任意绑定了,而是要指定一个`RoutingKey`(路由key)
- 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 `RoutingKey`。
- Exchange不再把消息交给每一个绑定的队列,而是根据消息的`Routing Key`进行判断,只有队列的`Routingkey`与消息的 `Routing key`完全一致,才会接收到消息
 

二、DirectExchange演示案例

实现思路如下:

1. 利用@RabbitListener声明Exchange、Queue、RoutingKey(不使用bean声明,基于@RabbitListener注解声明)

2. 在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2

3. 在publisher中编写测试方法,向it. direct发送消息

具体步骤:

步骤一:

1.在consumer服务中,编写两个消费者方法,分别监听direct.queue1和direct.queue2,

2.并利用@RabbitListener声明Exchange、Queue、RoutingKey

@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue1"),exchange = @Exchange(name = "it.direct", type = ExchangeTypes.DIRECT),key = {"red", "blue"}
))
public void listenDirectQueue1(String msg){System.out.println("消费者接收到direct.queue1的消息:【" + msg + "】");
}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "direct.queue2"),exchange = @Exchange(name = "it.direct", type = ExchangeTypes.DIRECT),key = {"red", "yellow"}
))
public void listenDirectQueue2(String msg){System.out.println("消费者接收到direct.queue2的消息:【" + msg + "】");
}

步骤二:在publisher服务的SpringAmqpTest类中添加测试方法,向it. direct发送消息

@Test
public void testSendDirectExchange() {// 交换机名称String exchangeName = "it.direct";// 消息String message = "hello,red!";// 发送消息rabbitTemplate.convertAndSend(exchangeName, "red", message);
}

        

 Direct模式总结: 


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

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

基于@RabbitListener注解声明队列和交换机常见注解:

 @Queue
 @Exchange

相关文章:

RabbitMQ 入门(六)SpringAMQP五种消息类型(Direct Exchange)

一、发布订阅-DirectExchange(路由模式) 在Fanout模式中,一条消息,会被所有订阅的队列都消费。但是,在某些场景下,我们希望不同的消息被不同的队列消费。这时就要用到Direct类型的Exchange。 Direct Exchan…...

2062:【例1.3】电影票

【题目描述】 已知一位小朋友的电影票价是10元&#xff0c;计算x位小朋友的总票价是多少&#xff1f; 【输入】 输入x。 【输出】 人数和电影票总价&#xff0c;中间用一个空格隔开。 【输入样例】 2 【输出样例】 2 20 Code #include<iostream> using namespace st…...

Python | Leetcode Python题解之第477题汉明距离总和

题目&#xff1a; 题解&#xff1a; class Solution:def totalHammingDistance(self, nums: List[int]) -> int:n len(nums)ans 0for i in range(30):c sum(((val >> i) & 1) for val in nums)ans c * (n - c)return ans...

Leecode刷题之路第25天之K个一组翻转链表

题目出处 25-K个一组翻转链表-题目出处 题目描述 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保…...

nuxtjs3 使用tailwindcss做自适应

步骤 1: 安装 Tailwind CSS npm install tailwindcss postcss autoprefixer nuxtjs/tailwindcss步骤 2: 配置 Tailwind CSS 这将生成一个 tailwind.config.js 文件。 npx tailwindcss init步骤 3: 配置 nuxt.config.ts // https://nuxt.com/docs/api/configuration/nuxt-con…...

数据资产目录构建方法与应用

一、引言随着大数据、云计算、人工智能等技术的飞速发展&#xff0c;数据驱动已经成为企业发展的新引擎。数据资产目录作为数据管理的核心工具&#xff0c;不仅能够帮助企业更好地掌握自身数据资源的状况&#xff0c;还能为数据资产的全生命周期管理提供有力支撑。因此&#xf…...

【Python爬虫实战】从文件到数据库:全面掌握Python爬虫数据存储技巧

&#x1f308;个人主页&#xff1a;https://blog.csdn.net/2401_86688088?typeblog &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html 目录 前言 一、文本文件数据存储的基础 二、如何将爬取的数据存储为.txt文件 三、如何…...

断其一指,无惧!ProFusion3D: 相机或者激光失效仍高效的多传感器融合3D目标检测算法

Abstract 多传感器融合在自动驾驶中的3D目标检测中至关重要&#xff0c;摄像头和激光雷达是最常用的传感器。然而&#xff0c;现有方法通常通过将两种模态的特征投影到鸟瞰视角&#xff08;BEV&#xff09;或透视视角&#xff08;PV&#xff09;来进行单视角的传感器融合&…...

CCS字体、字号更改+CCS下载官方链接

Step1、 按照图示箭头操作 step2 Step3 点击确定&#xff0c;点击Apply(应用)&#xff0c;点击Apply and close(应用和关闭) 4、历代版本下载链接 CCS下载&#xff1a;官方链接https://www.ti.com/tool/CCSTUDIO The last but not least 如果成功的解决了你的问题&#x…...

YOLO11改进|注意力机制篇|引入SEAM注意力机制

目录 一、【SEAM】注意力机制1.1【SEAM】注意力介绍1.2【SEAM】核心代码二、添加【SEAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4三、yaml文件与运行3.1yaml文件3.2运行成功截图一、【SEAM】注意力机制 1.1【SEAM】注意力介绍 下图是【SEAM】的结构图,让我们简单分析一下…...

简历修订与求职经历 - Chap04

节后第一周有点山中无甲子的状况。Oct08&#xff0c;节后第一天几乎全天处于心流状态。上午下午很快时间就结束了。 周五&#xff0c;按照既有的面试频次&#xff0c;感觉可以做点别的。然后就联系了附近的驾校&#xff0c;打算把摩托车驾驶证拿了。然后几乎到了驾校&#xff…...

鸿蒙开发案例:推箱子

推箱子游戏&#xff08;Sokoban&#xff09;的实现。游戏由多个单元格组成&#xff0c;每个单元格可以是透明的、墙或可移动的区域。游戏使用Cell类定义单元格的状态&#xff0c;如类型&#xff08;透明、墙、可移动区域&#xff09;、圆角大小及坐标偏移。而MyPosition类则用于…...

mysql--表的约束

目录 理解表的约束和操作 如何理解&#xff1f; 1、空属性null 2、默认值default 3、列描述comment 4、自动填充zorefill 5、主键primary key &#xff08;1&#xff09;创建表时指定可以 &#xff08;2&#xff09;创建表后指定key &#xff08;3&#xff09;删除主…...

Ubuntu 上安装 docker 并配置 Docker Compose 详细步骤

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

MySQL去除空白字符(如非标准空格、制表符等)

在 MySQL 中&#xff0c;需要去除 site_name 字段的空格&#xff0c;可以使用 TRIM() 函数。这个函数可以去掉字符串开头和结尾的空格。以下是一个示例查询&#xff0c;演示如何选择去除空格后的 site_name&#xff1a; SELECT TRIM(site_name) AS site_name FROM site_info;如…...

2063:【例1.4】牛吃牧草

【题目描述】 有一个牧场&#xff0c;牧场上的牧草每天都在匀速生长&#xff0c;这片牧场可供15头牛吃20天&#xff0c;或可供20头牛吃10天&#xff0c;那么&#xff0c;这片牧场每天新生的草量可供几头牛吃1天&#xff1f; 【输入】 &#xff08;无&#xff09; 【输出】 如题…...

QT开发:深入掌握 QtGui 和 QtWidgets 布局管理:QVBoxLayout、QHBoxLayout 和 QGridLayout 的高级应用

目录 引言 1. QVBoxLayout&#xff1a;垂直布局管理器 基本功能 创建 QVBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐方式 示例代码与详解 2. QHBoxLayout&#xff1a;水平布局管理器 基本功能 创建 QHBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐…...

Bootstrapping、Bagging 和 Boosting

bagging方法如下&#xff1a; bagging和boosting比较...

板块龙头公司

高通 高通&#xff08;Qualcomm&#xff09;是一家总部位于美国加利福尼亚州的全球领先半导体和电信设备公司。成立于1985年&#xff0c;高通专注于无线通信技术的研发和创新。 移动处理器: 高通开发的骁龙&#xff08;Snapdragon&#xff09;系列芯片广泛用于智能手机和平板电…...

Java项目-基于Springboot的招生管理系统项目(源码+说明).zip

作者&#xff1a;计算机学长阿伟 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、ElementUI等&#xff0c;“文末源码”。 开发运行环境 开发语言&#xff1a;Java数据库&#xff1a;MySQL技术&#xff1a;SpringBoot、Vue、Mybaits Plus、ELementUI工具&#xff1a;IDEA/…...

Cosmos-Reason1-7B惊艳推理展示:从问题输入到结构化思考再到答案生成

Cosmos-Reason1-7B惊艳推理展示&#xff1a;从问题输入到结构化思考再到答案生成 获取更多AI镜像 想探索更多AI镜像和应用场景&#xff1f;访问 CSDN星图镜像广场&#xff0c;提供丰富的预置镜像&#xff0c;覆盖大模型推理、图像生成、视频生成、模型微调等多个领域&#xff0…...

STM32F103C8T6:基于蓝牙指令的舵机角度精确控制

1. 项目背景与应用场景 想象一下这样的场景&#xff1a;早晨醒来&#xff0c;你躺在床上一键遥控窗帘缓缓打开到45度角&#xff0c;让阳光刚好洒在床脚&#xff1b;或者通过手机APP远程调节摄像头云台&#xff0c;让监控视角精确对准门口快递柜。这些看似简单的智能家居功能&am…...

AI Agent 跑完任务怎么通知你?我写了个微信推送服务帐

1、普通的insert into 如果&#xff08;主键/唯一建&#xff09;存在&#xff0c;则会报错 新需求&#xff1a;就算冲突也不报错&#xff0c;用其他处理逻辑 回到顶部 2、基本语法&#xff08;INSERT INTO ... ON CONFLICT (...) DO (UPDATE SET ...)/(NOTHING)&#xff09; 语…...

深度神经网络训练全攻略:从梯度消失到Adam优化器,一篇搞懂所有技巧

训练深度神经网络就像调教一匹烈马——既要选对方向&#xff08;优化器&#xff09;&#xff0c;又要控制好缰绳&#xff08;学习率&#xff09;&#xff0c;还得给它戴好马鞍&#xff08;正则化&#xff09;。本文将带你系统掌握这些核心技巧&#xff0c;从此告别“训练不收敛…...

用AI写代码踩坑记:让DeepSeek帮我搞定CH32V003驱动WS2812B的PWM+DMA程序

从AI生成到实战调试&#xff1a;CH32V003驱动WS2812B的PWMDMA完整指南 第一次让DeepSeek帮我写CH32V003驱动WS2812B的代码时&#xff0c;我天真地以为只要把芯片手册扔给它就能坐享其成。直到看到它生成的PWM配置把TIM1_CH4映射到了PA8&#xff08;实际应该是PC4&#xff09;&a…...

从DeepFM源码到业务落地:Normalized Gini Coefficient在CTR预估中的实战调优指南

从DeepFM源码到业务落地&#xff1a;Normalized Gini Coefficient在CTR预估中的实战调优指南 当你在TensorFlow-DeepFM的源码中第一次看到Normalized Gini Coefficient这个评估指标时&#xff0c;是否和我一样产生过疑惑——为什么不用常见的AUC或LogLoss&#xff1f;这个问题困…...

Profinet转MODBUS TCP在精细化工塔讯工业自动化中的应用方案

一、案例背景化工行业属于流程型工业&#xff0c;对生产过程中的压力、流量、液位等参数监控要求极高&#xff0c;安全生产是行业核心底线。某精细化工园区新建数字化生产车间&#xff0c;现场过程监测设备采用Profinet协议智能仪表&#xff0c;包括西门子SITRANS P系列压力仪表…...

CiteSpace实战:如何用WOS数据生成高质量文献知识图谱(含美化技巧)

CiteSpace进阶指南&#xff1a;从WOS数据到学术级知识图谱的实战优化 在科研工作中&#xff0c;一篇优秀的文献综述往往能成为领域研究的"地图"&#xff0c;而知识图谱则是这张地图上最直观的路线标识。作为一款专业的文献计量工具&#xff0c;CiteSpace在学术界已有…...

在 ADT 中高效查看 CDS 依赖细节:吃透 Element Information Popup 与 ABAP Element Info View

在日常的 ABAP CDS 开发里,很多人把精力都放在 DDL 语法、注解、关联、扩展和激活错误上,却忽略了一个非常实用的观察窗口:Element Information Popup 与 ABAP Element Info View。这两个功能看上去像是一个简单的 F2 帮助窗口,真正用熟之后,你会发现它们远不只是看一眼对…...

SonarQube社区分支插件:为开源项目带来企业级分支分析功能 [特殊字符]

SonarQube社区分支插件&#xff1a;为开源项目带来企业级分支分析功能 &#x1f680; 【免费下载链接】sonarqube-community-branch-plugin A plugin that allows branch analysis and pull request decoration in the Community version of Sonarqube 项目地址: https://git…...