RabbitMQ系列【14】备份交换机

news2025/8/12 20:21:08

有道无术,术尚可求,有术无道,止于术。

文章目录

    • 前言
    • 代码实现
    • 测试

前言

在之前,我们分析了消息可靠性之发布确认、退回机制。当消息到达交换机后,但是没有找到匹配的队列时,退回模式(return)将消息回退给生产者。

使用RabbitTemplate发送消息,实际调用的还是底层RabbitMQChannel完成,例如退回模式(return)开启时,调用 channel.basicPublish方法,并设置了一个重要参数mandatorytrue
在这里插入图片描述
mandatorytrue时,如果交换机根据自身类型和消息路由键无法找到一个符合条件的队列时,那么会调用return方法将消息返回给生产者。当mandatory设置为false时,出现上述情形RabbitMQ会直接将消息扔掉。

除了退回模式RabbitMQ还提供了备份交换机机制,当交换机接收到一条不可路由消息时,将会把这条消息转发到备份交换机中,由备份交换机来进行转发和处理。

流程图如下说示:

在这里插入图片描述

注意事项:当退回模式和备份交换机一起使用的时候,备份交换机的优先级比较高,不会执行回退消息的回调。

代码实现

声明备份交换机、队列,类型为Fanout

@Configuration
public class MqBackupConfig {

    public static final String BACKUP_QUEUE = "backupQueue";

    public static final String BACKUP_EXCHANGE = "backupExchange";

    public static final String BACKUP_ROUTE_KEY = "backup.key";

    @Bean(BACKUP_QUEUE)
    public Queue backupQueue() {
        return QueueBuilder.durable(BACKUP_QUEUE).build();
    }

    @Bean(BACKUP_EXCHANGE)
    public FanoutExchange backupExchange() {
        return ExchangeBuilder.fanoutExchange(BACKUP_EXCHANGE).durable(true).build();
    }

    @Bean("backupBinding")
    public Binding backupBinding(@Qualifier(BACKUP_QUEUE) Queue backupQueue, @Qualifier(BACKUP_EXCHANGE) FanoutExchange backupExchange) {
        return BindingBuilder.bind(backupQueue).to(backupExchange);
    }

}

声明业务交换机、队列,并绑定备份交换机:

@Configuration
public class MqBizConfig {


    public static final String BIZ_QUEUE = "bizQueue";

    public static final String BIZ_EXCHANGE = "bizExchange";

    public static final String BIZ_ROUTE_KEY = "biz.key";


    @Bean(BIZ_QUEUE)
    public Queue bizQueue() {
        return QueueBuilder.durable(BIZ_QUEUE).build();
    }

    @Bean(BIZ_EXCHANGE)
    public Exchange bizExchange() {
        // 使用alternate-exchange 设置备份交换机
        return ExchangeBuilder.directExchange(BIZ_EXCHANGE).withArgument("alternate-exchange", MqBackupConfig.BACKUP_EXCHANGE).durable(true).build();
    }

    @Bean("bizBinding")
    public Binding bizBinding(@Qualifier(BIZ_QUEUE) Queue bizQueue, @Qualifier(BIZ_EXCHANGE) Exchange bizExchange) {
        return BindingBuilder.bind(bizQueue).to(bizExchange).with(BIZ_ROUTE_KEY).noargs();
    }

}

设置备份队列消费者:

    @RabbitListener(queues = {MqBackupConfig.BACKUP_QUEUE})
    public void receiveMessage(Message message) {
        System.out.println("备份队列收到消息" + new String(message.getBody()));
        System.out.println("发送告警信息给管理员");
        System.out.println("存入数据库等待人工处理");
    }

发送一条路由不正确的消息:

        Message message = new Message("HELLO WORLD".getBytes(StandardCharsets.UTF_8));
        rabbitTemplate.send(MqBizConfig.BIZ_EXCHANGE, "boot.key", message);

测试

发送消息,未被投递的消息被转发到备份交换机:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/33318.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ms10-046漏洞利用+bypassuac提权

目录 前期准备 漏洞利用 上传文件到目标主机 UAC介绍 使用bypassuac模块绕过uac进行提权。 关于钓鱼链接的拓展 前期准备 Win xp sp3关闭防火墙 实验前提 保证连通性,进行互ping 漏洞利用 进入msf查看需要利用的漏洞:ms10-046 search ms10-046 …

【Kafka】单分区单副本增加至多分区多副本

一、背景 系统:CentOS Linux release 7.9.2009 (Core) Kafka版本:2.11-2.0.0.3.1.4.0-315 [scala版本2.11;kafka 2.0.0版本;基于ambari3.1.4.0-315的版本 ] 二、现象 业务系统中总是报警:kafka消费延迟。 三、问题…

nodejs+vue+elementui线上买菜系统

本线上买菜系统主要包括三大功能模块,即管理员和用户。 (1)管理员模块:首页、个人中心、用户管理、商品分类管理、商品信息管理、系统管理、订单管理。 (2)前台:商品信息、公告信息、个人中心、…

java语言概述

目录 JDK和JRE的说明 Java语言的环境搭建 常用的DOS命令 第一个Java程序 创建java源文件 Hello.java 编译 步骤三:运行 总结 注 释(comment) JDK和JRE的说明 关系说明图 2、 概念说明 JDKJREJAVA开发工具(javac.exe java.exe、javaboc.exe&…

SpringIoc依赖查找-5

1. 依赖查找的今世前生: Spring IoC容器从Java标准中学到了什么? 单一类型依赖查找 JNDI - javax.naming.Context#lookup(javax.naming.Name) JavaBeans - java.beans.beancontext.BeanContext 集合类型依赖查找 java.beans.beancontext.BeanContext 集合查找方法 层…

基于android的移动学习平台(前端APP+后端Java和MySQL)

一、需求规格说明书 1.概述 1.1项目目的与目标, (1) 项目目的:设计并实现网络化的在线学习系统,对校内课程教学进行辅助,为学生和教师提供一个良好的互动平台,方便学生课后获取学习资源和进行交…

阿里云负载均衡SLB,HTTPS动态网站部署负载均衡,实现高并发流量分发

第一步购买服务器,测的话一般就用按量付费几毛钱一小时 我是用了三台,一台是常用的服务器,两台临时服务器进行部署项目 2:服务器购买完之后,开始安装项目运行环境,我是宝塔一键按键的,PHP7.1。…

新知实验室-基于腾讯云音视频TRTC的微信小程序实践

前言 腾讯会议是我们常用的一款线上会议软体,如果想要使用,我们需要下载软体使用,相比之下,基于腾讯云音视频的TRTC提供了一个很好的解决方案,我们通过接入到小程序中来实现快捷的开始会议,加入会议。 TR…

[Power Query] 删除错误/空值

数据导入后,有可能出现错误(Error)或者空值(null) ,我们需要对此进行删除。为此,本文通过讲解Power Query中的删除错误/空值操作,帮助大家的同时也便于日后自身的复盘学习 数据源 将数据源导入到Power BI Desktop,单击…

VSCode中Prettier插件依赖安装及冲突解决

文章目录一、Prettier插件安装1.1 安装Prettier插件1.2 添加Prettier配置文件1.3 配置格式化工具1.4 配置自动格式化1.5 与ESLint冲突解决二、Prettier依赖安装2.1 安装依赖2.2 配置2.3 配置指令2.4 其他配置和冲突解决一、Prettier插件安装 1.1 安装Prettier插件 通过VSCode…

[附源码]计算机毕业设计JAVA流浪动物救助系统

[附源码]计算机毕业设计JAVA流浪动物救助系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

【算法基础】(一)基础算法 --- 快速排序

✨个人主页:bit me ✨当前专栏:算法基础 🔥专栏简介:该专栏主要更新一些基础算法题,有参加蓝桥杯等算法题竞赛或者正在刷题的铁汁们可以关注一下,互相监督打卡学习 🌹 🌹 &#x1f3…

游戏品类加速回暖,文娱内容持续火热——2022年IAA行业品类发展洞察系列报告·第三期

易观分析:易观分析联合穿山甲与巨量算数共同构建IAA发展指数,通过行业规模、内容热度、商业变现的多维数据指标反映行业细分品类的发展情况,对领域季度运行情况、热门品类进行分析解读,助力开发者深入洞察领域特性和发展趋势&…

【American English】美语的连读规则

文章目录连读规则1. 辅音 元音2. 辅音 辅音情形1: 相同或相近的辅音相遇情形2: 辅音 h情形3: 爆破音 [l] / [m] / [n]情形4: 爆破音 [f] / [v]情形5: 爆破音 [tf]/[]3. 元音 元音情形1: 嘴唇变平时增加 [y] 音情形2: 嘴唇变圆时增加 [w] 音4. 特殊辅音 yRef连读规则 英…

open-set recognition(OSR)开集识别

开集识别 闭集识别 ​ 训练集中的类别和测试集中的类别是一致的,最常见的就是使用公开数据集进行训练,所有数据集中的图像的类别都是已知的,没有未知种类的图像。传统的机器学习的算法在这些任务上已经取得了比较好的效果。 (训…

简述供应商管理SRM系统

简道云SRM管理系统供应商关系管理(SRM系统),是企业可以用来对供应商的优势和能力进行系统的、全行业范围的评估,涉及企业整体的商业战略,供应商寻源、采购审批、比价、招投标管理、订单执行、库存可视化管理、财务支付审批对账、供应商绩效评…

java--并发

并发1.java的线程状态(1)sleep wait的区别和联系2.线程池的核心参数3.lock 和 synchronized4.volatile能否保证线程安全5.java中的悲观锁和乐观锁6.Hashtable和ConcurrentHashMap7.对ThreadLocal1.java的线程状态 new 新建:普通的类&#xf…

流媒体技术基础-流媒体服务与框架

一、开源流媒体服务器 38款 流媒体服务器开源软件 主流的开源流媒体服务器及框架如下: 1.Live555 [RTSP拉流] 一个为流媒体提供解决方案的跨平台的C开源项目,它实现了对标准流媒体传输协议如 RTP/RTCP、RTSP、SIP等的支持。 实现了对多种音视频编码格…

【毕业设计】机器学习的溢油特征提取与识别

前言 📅大四是整个大学期间最忙碌的时光,一边要忙着准备考研,考公,考教资或者实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科同学来说是充满挑战。为帮助大家顺利通过…

城市内涝地埋式积水监测系统解决方案

一、方案背景 近 20 年来,我国城市化进程加快,城市地区由于人口密集,物资财产密度不断加大等特点,高强度暴雨积水形成的洪涝灾害对城市化地区产生的威肋和带来的狠失愈来愈大。由于城市的不断扩建,使工业区、商业区和居…