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

rabbitmq 交换机相关实例代码

1.扇形交换机

    定义扇形交换机和队列

package com.macro.mall.portal.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 扇形交换机测试*/
@Configuration
public class RabbitMqFanoutQueueConfig {//=================== fanout 模式下,所发的消息属于广播模式  ====================/***  定义队列 fanout.a  fanout.b fanout.c*/@Beanpublic Queue fanoutA() {return new Queue("fanout.a");}@Beanpublic Queue fanoutB() {return new Queue("fanout.b");}@Beanpublic Queue fanoutC() {return new Queue("fanout.c");}/*** 定义个fanout交换器*/@BeanFanoutExchange fanoutExchange() {// 定义一个名为fanoutExchange的fanout交换器return new FanoutExchange("fanoutExchange");}/*** 将队列fanout.a  fanout.b fanout.c  分别 与fanout交换器绑定*/@Beanpublic Binding bindingExchangeWithA() {return BindingBuilder.bind(fanoutA()).to(fanoutExchange());}@Beanpublic Binding bindingExchangeWithB() {return BindingBuilder.bind(fanoutB()).to(fanoutExchange());}@Beanpublic Binding bindingExchangeWithC() {return BindingBuilder.bind(fanoutC()).to(fanoutExchange());}}

 定义扇形交换机发送端,发送时,第二个参数是路由,不需要设置

 @Autowiredprivate AmqpTemplate amqpTemplate;@PostMapping("/fanoutMsg")@Operation(summary = "发送扇形消息", description = "发送扇形消息")public String sendMsg() {amqpTemplate.convertAndSend("fanoutExchange","","扇形交换机消息");return "ok";}

定义扇形交换机接收端

package com.macro.mall.portal.component;import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;/*** @Description  扇形消息接收* @Author clj* @Date 2023/11/3 16:57*/
@Component
@Slf4j
public class FanoutReceive {@RabbitListener(queues = "fanout.a")public void consumers(String msg) {log.info("[faount.a] recvice,{}",msg);}@RabbitListener(queues = "fanout.b")public void consumers2(String msg) {log.info("[faount.b] recvice,{}",msg);}@RabbitListener(queues = "fanout.c")public void consumers3(String msg) {log.info("[faount.c] recvice,{}",msg);}
}

当点击发送后,以上三个方法都会接受到消息,不需要路由。

2主题交换机

   定义交换机和队列,其中路由可以根据规则匹配,*表示匹配一个任意字符,#表示一个或多个

package com.macro.mall.portal.config;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** topic消息测试* @Author clj* @Date 2023/11/6 16:52*/
@Configuration
public class RabbitmqTopicQueueConfig {@Beanpublic TopicExchange topicExchange () {return  new TopicExchange("topicExchange");}@Beanpublic Queue topicA() {return new Queue("topic.a");}@Bean Queue topicB() {return new Queue("topic.b");}@Bean Queue topicC() {return new Queue("topic.c");}@Beanpublic Binding bindingTopicA() {return BindingBuilder.bind(topicA()).to(topicExchange()).with("topic.a");}@Beanpublic Binding bindingTopicB() {return  BindingBuilder.bind(topicB()).to(topicExchange()).with("topic.*.msg");}@Beanpublic Binding bindingTopicC() {return BindingBuilder.bind(topicC()).to(topicExchange()).with("topic.msg.#");}}

 定义主题交换机发送端

 @PostMapping("/topicMsg")@Operation(summary = "发送主题交换机精确匹配a", description = "发送主题交换机精确匹配a")public String sendTopicMsg() {amqpTemplate.convertAndSend("topicExchange","topic.a","发送主题交换机a");return "ok";}@PostMapping("/topicMsg1")@Operation(summary = "发送主题交换机精确匹配b。匹配*号", description = "发送主题交换机精确匹配cb")public String sendTopicMsg1() {amqpTemplate.convertAndSend("topicExchange","topic.1.msg","发送主题交换机b");return "ok";}@PostMapping("/topicMsg9")@Operation(summary = "发送主题交换机精确匹配b。匹配*号", description = "发送主题交换机精确匹配cb")public String sendTopicMsg9() {amqpTemplate.convertAndSend("topicExchange","topic.2.msg","发送主题交换机b");return "ok";}@PostMapping("/topicMsg2")@Operation(summary = "发送主题交换机路由匹配c,匹配#号1", description = "发送主题交换机路由匹配")public String sendTopicMs2g() {amqpTemplate.convertAndSend("topicExchange","topic.msg.1","发送主题交换机c");return "ok";}@PostMapping("/topicMsg3")@Operation(summary = "发送主题交换机路由匹配c,匹配#号2", description = "发送主题交换机路由匹配")public String sendTopicMs3g() {amqpTemplate.convertAndSend("topicExchange","topic.msg.2","发送主题交换机c");return "ok";}@PostMapping("/topicMsg4")@Operation(summary = "发送主题交换机路由匹配c,匹配#号4", description = "发送主题交换机路由匹配")public String sendTopicMs4g() {amqpTemplate.convertAndSend("topicExchange","topic.msg.abcdefg","发送主题交换机c");return "ok";}

定义主题交换机接收端

package com.macro.mall.portal.component;import com.rabbitmq.client.Channel;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.amqp.support.AmqpHeaders;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.handler.annotation.Header;import java.io.IOException;/*** @Description* @Author clj* @Date 2023/11/6 17:01*/
@Configuration
@Slf4j
public class topicReceive {@RabbitListener(queues = "topic.a")public void execute(String msg, Channel channel,@Header(AmqpHeaders.DELIVERY_TAG) long tag) throws IOException {log.info("topicA接收精确匹配消息,{}",msg);channel.basicAck(tag,false);}@RabbitListener(queues = "topic.b")public void execute1(String msg) {log.info("topicB接收*号匹配消息,{}",msg);}@RabbitListener(queues = "topic.c")public void execute3(String msg) {log.info("topicC接收#匹配消息,{}",msg);}
}

相关文章:

rabbitmq 交换机相关实例代码

1.扇形交换机 定义扇形交换机和队列 package com.macro.mall.portal.config;import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.FanoutExchange; import org.springframework.amqp.…...

第四章IDEA操作Maven

文章目录 创建父工程开启自动导入配置Maven信息创建Java模块工程创建 Web 模块工程 在IDEA中执行Maven命令直接执行手动输入 在IDEA中查看某个模块的依赖信息工程导入来自版本控制系统来自工程目录 模块导入情景重现导入 Java 类型模块 导入 Web 类型模块 创建父工程 开启自动导…...

Go语言函数签名和匿名函数

函数签名 函数类型又叫做函数签名,一个函数的类型就是函数定义首行去掉函数名、参数名和{},可以用fmt.Printf的“%T”格式化参数打印函数的类型。 两个函数类型相同的条件是:拥有相同的形参列表和返回值列表,形参名可以不同。 ty…...

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间缩短一半&#…...

基于JavaWeb的网上销售系统设计与实现

项目描述 临近学期结束,还是毕业设计,你还在做java程序网络编程,期末作业,老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下,你想解决的问…...

wpf添加Halcon的窗口控件报错:下列控件已成功添加到工具箱中,但未在活动设计器中启用

报错截图如下: 注意一下新建工程的时候选择wpf应用而不是wpf应用程序。 添加成功的控件:...

antv/x6 自定义html节点并且支持动态更新节点内容

antv/x6 自定义html节点 效果图定义一个连接桩公共方法注册图形节点创建html节点动态更新节点内容 效果图 定义一个连接桩公共方法 const ports {groups: {top: {position: top,attrs: {circle: {r: 4,magnet: true,stroke: #cf1322,strokeWidth: 1,fill: #fff,style: {visib…...

设计模式之命令模式

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概4000多字,阅读时间长可能需要4-5分钟,请结合示例耐心读完,绝对有收获。设计模式属于程序的设计思…...

Linux学习笔记--高级

Shell概述 1,shell概述 是一个c语言编写的脚本语言,是linux和用户的桥梁,用户输入命令交给shell处理。shell,将相应的操作传递给内核(kernel),内核把处理的结果输出给用户 1.1Shell解释器有哪…...

在Java中操作Redis

Redis中如何的去存放一个Java对象? 直接存放Json类型即可,因为我们Json类型最终就是一个String类型。 Redis的Java客户端 Redis的常用命令是我们操作Redis的基础,那么我们在Java程序当中如何来操作Redis呢? 要想基于Java语言…...

【服务器】fiber协程模块

fiber协程模块 以下是从sylar服务器中学的,对其的复习; sylar的fiber协程模块是基于ucontext_t实现非对称协程 函数只有两个行为:调用与返回。一旦函数返回后,它在栈上所拥有的状态将被销毁。协程相比函数多了两个动作&#xf…...

SparkML

SparkML SparkML_lr_train :读取py处理后的train表用于训练,将训练模型保存好。 SparkML_lr_predict :读取训练好的模型,读取py处理后的test表用于预测。将预测结果写入normal_data中,根据id修改stream_is_normal的值。…...

实时定位与路径优化:跑腿App系统开发中的地理信息技术

本文将介绍如何使用地理信息技术实现实时定位和路径优化功能,以提高跑腿服务的效率。 实时定位 用户位置获取 # 示例:获取用户的实时位置 def get_user_location(user_id):# 使用GPS或网络定位技术获取用户的地理坐标# 返回经度和纬度信息return lon…...

Tomcat的HTTP Connector

https://tomcat.apache.org/tomcat-10.1-doc/config/http.html 一个Connector代表一个接收请求、返回响应的端点(endpoint)。 HTTP Connector 元素代表一个支持HTTP/1.1的Connector组件。一个这样的组件在服务端一个指定的TCP端口上监听连接。一个Serv…...

将Pytorch搭建的ViT模型转为onnx模型

本文尝试将pytorch搭建的ViT模型转为onnx模型。 首先将博主上一篇文章中搭建的模型ViT Vision Transformer超详细解析,网络构建,可视化,数据预处理,全流程实例教程-CSDN博客转存为.pth torch.save(model, my_vit_model.pth) 然…...

图神经网络(GNN)性能优化方案汇总,附37个配套算法模型和代码

图神经网络的表达能力对其性能和应用范围有着重要的影响,是GNN研究的核心问题和发展方向。增强表达能力是扩展GNN应用范围、提高性能的关键所在。 目前GNN的表达能力受特征表示和拓扑结构这两个因素的影响,其中GNN在学习和保持图拓扑方面的缺陷是限制表…...

国科大移动互联网考试资料(2023+2020+2018真题+答案)

老师王文杰。真题附加2022部分...

ModStart系统安全规范建议

1 不要使用弱密码 很多人为了系统管理方便(或者是懒),经常会设置类似 123456、admin 这样的管理密码,这样的密码很容易被暴力软件扫描出来。 2 不要使用默认配置 默认的软件系统设置、默认的系统端口、默认的网站设置在发生漏洞…...

【漏洞复现】Django_debug page_XSS漏洞(CVE-2017-12794)

感谢互联网提供分享知识与智慧,在法治的社会里,请遵守有关法律法规 文章目录 1.1、漏洞描述1.2、漏洞等级1.3、影响版本1.4、漏洞复现1、基础环境2、漏洞分析3、漏洞验证 说明内容漏洞编号CVE-2017-12794漏洞名称Django_debug page_XSS漏洞漏洞评级影响范…...

Redis性能调优:深度剖析与示例解析

标题:Redis性能调优:深度剖析与示例解析 引言 Redis是一款强大的开源内存数据库,广泛应用于高性能系统。然而,为了充分发挥Redis的性能,需要进行合理的性能调优。本博客将深入介绍Redis性能调优的策略和示例&#xf…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

springboot 百货中心供应链管理系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 )⽤户级环境变量与系统级环境变量 全局属性:环境变量具有全局属性,会被⼦进程继承。例如当bash启动⼦进程时,环 境变量会⾃动传递给⼦进程。 本地变量限制:本地变量只在当前进程(ba…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

EtherNet/IP转DeviceNet协议网关详解

一&#xff0c;设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络&#xff0c;本网关连接到EtherNet/IP总线中做为从站使用&#xff0c;连接到DeviceNet总线中做为从站使用。 在自动…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...