SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
文章目录
- pom
- yml
- 生产者
- 消费者
Topic
类型的Exchange
与Direct
相比,都是可以根据RoutingKey
把消息路由到不同的队列。只不过Topic
类型Exchange
可以让队列在绑定Routing key
的时候使用通配符!
Routingkey
一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: snow.com
通配符规则:
#
:匹配一个或多个词
*
:匹配不多不少恰好1个词
举例:
snow.#
:能够匹配snow.com.cn
或者 snow.com
snow.*
:只能匹配snow.com
如下图:
解释:
- Queue1:绑定的是
china.#
,因此凡是以china.
开头的routing key
都会被匹配到。包括china.news和china.weather - Queue2:绑定的是
#.news
,因此凡是以.news
结尾的routing key
都会被匹配。包括china.news和japan.news
案例需求:
实现思路如下:
- 并利用 @RabbitListener 声明 Exchange、Queue、RoutingKey
- 在 consumer 服务中,编写两个消费者方法,分别监听
business.test.topic.queue1
和business.test.topic.queue2
- 在 publisher 中编写测试方法,向
business.test.topic
发送消息
pom
<dependencies><!--RabbitMQ 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies>
yml
server:port: 8080
spring:rabbitmq:host: **.***.**.***port: 5672username: ****password: ****
生产者
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;/*** @author: Snow* @date: 2023/1/6* *************************************************** 修改记录(时间--修改人--修改说明):*/
@RestController
@RequestMapping("/topic")
public class SendController {@Autowiredprivate RabbitTemplate rabbitTemplate;@GetMapping("/send/{message}")public void send(@PathVariable("message") String message){// 交换机名称String exchangeName = "business.test.topic";// 发送消息if(message.contains("china") && message.contains("news")){rabbitTemplate.convertAndSend(exchangeName, "china.news", message);return;}if(message.contains("china")){rabbitTemplate.convertAndSend(exchangeName, "china.lala", message);return;}if(message.contains("news")){rabbitTemplate.convertAndSend(exchangeName, "lalla.news", message);return;}}}
消费者
import org.springframework.amqp.core.ExchangeTypes;
import org.springframework.amqp.rabbit.annotation.Exchange;
import org.springframework.amqp.rabbit.annotation.Queue;
import org.springframework.amqp.rabbit.annotation.QueueBinding;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** @author: Snow* @date: 2023/1/6* *************************************************** 修改记录(时间--修改人--修改说明):*/
@Component
public class Consumer {@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "business.test.topic.queue1"),exchange = @Exchange(name = "business.test.topic", type = ExchangeTypes.TOPIC),key = "china.#"))public void listenTopicQueue1(String msg){System.out.println("消费者接收到topic.queue1的消息:【" + msg + "】");}@RabbitListener(bindings = @QueueBinding(value = @Queue(name = "business.test.topic.queue2"),exchange = @Exchange(name = "business.test.topic", type = ExchangeTypes.TOPIC),key = "#.news"))public void listenTopicQueue2(String msg){System.out.println("消费者接收到topic.queue2的消息:【" + msg + "】");}
}
相关文章:

SpringBoot实现RabbitMQ的通配符交换机(SpringAMQP 实现Topic交换机)
文章目录 pomyml生产者消费者 Topic类型的Exchange与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符! Routingkey 一般都是有一个或多个单词组成,多个单词…...

opencv图像处理技术(形态学操作)
形态学(Morphology)是数学中研究形状、结构和变换的分支,而在图像处理中,形态学主要用于描述和分析图像中的形状和结构。形态学操作通常涉及基本的集合运算,如腐蚀、膨胀、开运算、闭运算等,以及与结构元素…...
如何构建数据指标体系
构建一套科学、完备且实用的数据分析指标体系是一项系统性的工程,其核心在于将业务理解、目标设定、度量标准选择、数据采集与整理、数据分析、指标体系构建、持续优化与改进等多个环节有机融合,以实现对业务状况的精准刻画、趋势预测及决策支持。以下是…...

python统计分析——一般线性回归模型
参考资料:python统计分析【托马斯】 当我想用一个或多个其他的变量预测一个变量的时候,我们可以用线性回归的方法。 例如,当我们寻找给定数据集的最佳拟合线的时候,我们是在寻找让下式的残差平方和最小的参数(k,d): 其…...

【cocos creator】【TS】贝塞尔曲线,地图之间显示曲线
参考: https://blog.csdn.net/Ctrls_/article/details/108731313 https://blog.csdn.net/qq_28299311/article/details/104009804 const { ccclass, property } cc._decorator;ccclass export default class creatPoint extends cc.Component {property(cc.Node)bu…...
COMFYUI换脸ReActor报错Value not in list: face_restore_model: ‘codeformer.pth‘解决
Value not in list: face_restore_model: codeformer.pth not in [none, GFPGANv1.3.pth] 搜了下没找到答案,最后看github官方的指引: You can download models here: https://huggingface.co/datasets/Gourieff/ReActor/tree/main/models/facerestore…...
深入理解Java中的字段与属性的区别
1、Java中的属性和字段有什么区别? 答:Java中的属性(property),通常可以理解为get和set方法。 而字段(field),通常叫做“类成员”,或 "类成员变量”,有时也叫“域”,理解为“数据成员”&…...

【Locust分布式压力测试】
Locust分布式压力测试 https://docs.locust.io/en/stable/running-distributed.html Distributed load generation A single process running Locust can simulate a reasonably high throughput. For a simple test plan and small payloads it can make more than a thousan…...
富格林:出金异常警惕黑幕陷阱受骗
富格林悉知,在做单出金时落入黑幕陷阱亏损后,需尽快发现和总结错误,用心筹维权谋安全出金盈利方法并追回亏损。因为黄金市场优势众多,众多的投资者进入市场投资,但因为经验不足,在面对黑幕陷阱是获取无法及…...
Docker - Nginx
博文目录 文章目录 说明命令 说明 Docker Hub Nginx 数据卷数据卷印射在容器内的路径nginx.conf/etc/nginxnginx.html/usr/share/nginx/htmlnginx.log/var/log/nginx 容器内的路径说明/etc/nginx/nginx.conf配置文件/etc/nginx/conf.d配置目录/usr/share/nginx/html静态目录/…...

免费搭建幻兽帕鲁服务器(Palworld免费开服教程)
随着互联网技术的不断发展和普及,网络游戏已经成为了人们休闲娱乐的重要方式之一。而在众多网络游戏中,幻兽帕鲁以其独特的游戏设定和玩法,吸引了大量玩家的关注。为了满足广大玩家的需求,本文将介绍如何免费搭建幻兽帕鲁服务器&a…...

作业习题
实验代码: import java.util.Scanner;class chazhao {public static void main(String[] args) {Scanner scnew Scanner(System.in);System.out.println("请输入你要的数组");String line sc.nextLine();String[] lineArrline.split(" ");int[…...

解决unbuntu更新到23.10 mantic firefox无法使用的问题
产看历史版本号: 升级到最新版本后查看: roottesthost01:/home/test/Desktop# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 23.10 Release: 23.10 Codename: mantic 打开firefox发现图标找…...
idea常用配置——注释快捷键
1、单行注释:使用 Ctrl / 可以添加或删除当前行的注释。如果你想要给某一行添加注释,只需要将光标放在那一行,然后按下 Ctrl / 即可。如果你想要删除那一行的注释,同样只需要将光标放在那一行,然后再次按下 Ctrl /。…...

Hidl 学习总结 2
1、Android apk 调用Hidl处理 app添加对应的hidl jar包 2、MainActivity 添加如下代码 package com.example.test2;import androidx.appcompat.app.AppCompatActivity; import vendor.hardware.test.V1_0.ITest; import vendor.hardware.test.V1_0.ITestCmdCallback; import …...

深度学习学习日记4.7
1.梯度下降 w 新 w旧 - 学习率梯度 训练的目的就是让 loss 减小 2.前向传播进行预测, 反向传播进行训练(每一个参数通过梯度下降进行更新参数),(1前向传播 2求 loss 3反向传播 4梯度更新) 能够让损失下降的参数,就是更好的参数。 损失…...

五一假期来临,各地景区云旅游、慢直播方案设计与平台搭建
一、行业背景 经文化和旅游部数据中心测算,今年清明节假期3天全国国内旅游出游1.19亿人次,按可比口径较2019年同期增长11.5%;国内游客出游花费539.5亿元,较2019年同期增长12.7%。踏青赏花和户外徒步成为假期的热门出游主题。随着…...

自动驾驶中的交通标志识别原理及应用
自动驾驶中的交通标志识别原理及应用 附赠自动驾驶学习资料和量产经验:链接 概述 道路交通标志和标线时引导道路使用者有秩序使用道路,以促进道路行车安全,而在驾驶辅助系统中对交通标志的识别则可以不间断的为整车控制提供相应的帮助。比如…...

数据挖掘入门项目二手交易车价格预测之建模调参
文章目录 目标步骤1. 调整数据类型,减少数据在内存中占用的空间2. 使用线性回归来简单建模3. 五折交叉验证4. 模拟真实业务情况5. 绘制学习率曲线与验证曲线6. 嵌入式特征选择6. 非线性模型7. 模型调参(1) 贪心调参(2)…...

【Java】Java使用Swing实现一个模拟计算器(有源码)
📝个人主页:哈__ 期待您的关注 今天翻了翻之前写的代码,发现自己之前还写了一个计算器,今天把我之前写的代码分享出来。 我记得那会儿刚学不会写,写的乱七八糟,但拿来当期末作业还是不错的哈哈。 直接上…...

【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Java 二维码
Java 二维码 **技术:**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

热烈祝贺埃文科技正式加入可信数据空间发展联盟
2025年4月29日,在福州举办的第八届数字中国建设峰会“可信数据空间分论坛”上,可信数据空间发展联盟正式宣告成立。国家数据局党组书记、局长刘烈宏出席并致辞,强调该联盟是推进全国一体化数据市场建设的关键抓手。 郑州埃文科技有限公司&am…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...