RabbitMQ系列【15】AmqpAdmin使用详解

news2025/8/8 0:50:11

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

文章目录

    • 前言
    • 1、查询队列信息
    • 2、声明、删除交换机
    • 3、声明、删除队列
    • 4、声明、删除交换机/队列绑定关系
    • 5、初始化

前言

在之前,我们都是通过注入Bean的方式去声明交换机、队列,应用启动时去自动创建。

如果需要动态创建,比如通过接口、或者业务代码自己去操作,这个使用就需要使用RabbitMQ提供的操作接口。

如果是基于Spring Boot,则可以直接使用其提供的AmqpAdmin,其对RabbitMQ的原生接口进行了二次封装,使用起来十分方便。

AmqpAdmin接口,只有一个实现类RabbitAdmin,该接口源码如下:

public interface AmqpAdmin {
    void declareExchange(Exchange var1);

    boolean deleteExchange(String var1);

    @Nullable
    Queue declareQueue();

    @Nullable
    String declareQueue(Queue var1);

    boolean deleteQueue(String var1);

    void deleteQueue(String var1, boolean var2, boolean var3);

    void purgeQueue(String var1, boolean var2);

    int purgeQueue(String var1);

    void declareBinding(Binding var1);

    void removeBinding(Binding var1);

    @Nullable
    Properties getQueueProperties(String var1);

    @Nullable
    QueueInformation getQueueInfo(String var1);

    default void initialize() {
    }
}

可以看到接口中声明了很多交换机、队列的操作方法。使用时,只需要注入即可,Spring Boot已经帮我们做好了自动配置。

    @Autowired
    AmqpAdmin amqpAdmin;

1、查询队列信息

根据队列名称查询队列信息,可以查询当前队列消息总数、消费者数量。

        // 获取队列名称、消息计数和消费者计数
        // Properties getQueueProperties(String queueName); 获取队列信息
        Properties properties = amqpAdmin.getQueueProperties("bootQueue001");
        // QueueInformation getQueueInfo(String var1); 获取队列信息
        QueueInformation queueInformation = amqpAdmin.getQueueInfo("bootQueue001");

返回结果:
在这里插入图片描述

2、声明、删除交换机

declareExchange方法声明一个交换机:

        // void declareExchange(Exchange var1); 声明一个交换机
        Exchange adminExchange = ExchangeBuilder.directExchange("adminExchange").durable(true).build();
        amqpAdmin.declareExchange(adminExchange);

deleteExchange方法根据名称删除一个交换机,并返回删除结果,如果不存在,也表示删除成功:

        // boolean deleteExchange(String var1); 删除一个交换机
        boolean deleteExchange = amqpAdmin.deleteExchange("deleteExchange");
        System.out.println("删除一个交换机:" + deleteExchange);

3、声明、删除队列

declareQueue方法声明一个队列,没有指定名称时,会生成一个随机名称:

        // Queue declareQueue(); 声明一个随机名称队列:amq.gen-9RGhmUOsu8GbhmLfPe9-KQ
        Queue queue = amqpAdmin.declareQueue();
        System.out.println("声明一个队列:" + queue.getName());

        // String declareQueue(Queue var1); 声明一个队列
        Queue declareQueue = QueueBuilder.durable("declareQueue").build();
        String s = amqpAdmin.declareQueue(declareQueue);
        System.out.println("声明一个队列:" + s);

deleteQueue方法根据名称删除一个队列,并可以指定两个参数,用于队列未被使用、为空时是否删除。

        // void deleteQueue(String queueName, unused, empty); 删除一个队列
        // 参数 queueName:队列名称
        //     unused:true表示队列未使用删除,正在使用则不删除且抛出异常。false表示必须删除,默认值false
        //     empty: true表示队列为空删除,不为空则不删除且抛出异常。false表示必须删除,默认值false
        amqpAdmin.deleteQueue("declareQueue", true, true);

purgeQueue方法删除某个队列的所有消息:

        //  int purgeQueue(String queueName); 删除某个队列的所有消息
        int r = amqpAdmin.purgeQueue("declareQueue");
        System.out.println("删除某个队列的所有消息:" + r);

        // void purgeQueue(String queueName, boolean noWait); 删除某个队列的所有消息,noWait:选择不等待清除任务完成
        amqpAdmin.purgeQueue("declareQueue", false);

4、声明、删除交换机/队列绑定关系

declareBinding声明交换机、队列绑定关系:

        // void declareBinding(Binding binding); 声明交换机、队列绑定关系
        Binding binding = BindingBuilder.bind(queue).to(adminExchange).with("declare.key").noargs();
        amqpAdmin.declareBinding(binding);

removeBinding 删除绑定关系:

        // void removeBinding(Binding var1); 删除交换机、队列绑定关系
        amqpAdmin.removeBinding(binding);

5、初始化

initialize()IOC容器中获取到所有的 ExchangeQueueBinding并初始化:

在这里插入图片描述

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

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

相关文章

前后端分离架构好用吗?

在数据化发展趋势越来越分明的当下,前后端分离架构可以让前、后端的工程师们做好各自分内的事,专注于各自领域,从而提升整体办公效率和推进数字化进程。说到这,有不少朋友会问我们,前后端分离架构好用吗?要…

WPF的数据绑定

文章目录前言一、WPF数据绑定的概要1. 数据绑定涉及到两个方面:2.对于绑定源,在WPF可以是以下四种:二、 绑定的模式1.根据数据流的方向,WPF中的数据绑定分为以下四种:三.绑定目标值影响绑定源值条件1. UpdateSourceTri…

小程序开发---01小程序初识

本教程主要讲如何开发一个微信小程序,从小程序的注册,开发环境的搭建,基础语法,路由导航,数据请求,分包,组件化等方面详情的接受了小程序开发的一些必备基础知识。 本系列文章使用是的B站黑马教…

OpenGL原理与实践——核心模式(四):摄像机变换理论与应用

目录 变换是什么?对于OpenGL的摄像机又意味着什么? MVP变换 投影变换 正交投影变换 透视投影变换 摄像机/投影矩阵的应用 绘制单个立方体——源码及渲染结果 绘制多个立方体——源码及渲染结果 构建摄像机类——实现控制摄像机移动 摄像机坐标…

全屋智能--智慧家庭新风向

全屋智能是指综合物联网、云计算和人工智能等技术,对该空间场所内的家居设备进行系统化集中管理,并赋予其人与场景交互能力,成为用户看不见的生活管家。全屋智能的核心价值在于自主感知、自主决策、自主控制、自主反馈的生命力。 全屋智能目前…

图床云存储项目课程随堂笔记

这个项目属实重量级,第一遍学习的过程比较懵,只是记录一下随堂笔记。后面理解了项目后端代码流程,再细写几篇博客归纳。 基本单机环境配置 大的项目你可能连配置都配不清楚。 新手必须要心细,因为你错了一步,想要纠…

网站被大量cc攻击导致打不开怎么解决

家好,今天小蚁君给大家分享一个昨天接入我们防护的客户,说下这个客户特点, 网站业务,由于源服务器是在阿里云,防护阈值很低,基本上是无防御的,随便压测一下就死,通过朋友介绍过来&am…

44个微服务架构设计模式你还不学吗,大佬都汇总好了,只能说太详细了!

前言 微服务架构已成为现代应用程序开发的事实上的选择。虽然它解决了某些问题,但它不是灵丹妙药。它有几个缺点,在使用这种架构时,必须解决许多问题。这就需要学习这些问题中的常见模式并用可重用的解决方案来解决它们。因此,需…

若依框架的使用

目录 1.为什么使用若依框架 2.环境搭建 2.1下载代码 2.2 系统配置 1.为什么使用若依框架 若依是一个快速开发框架,基于springboot,集成了mybatis,spring security,redis等常用的框架,支持多语言,已经实…

“闭关修炼”这么久,吃透这些“微服务”笔记,足够面试涨10K

01 SpringBoot 1.1 面试相关 (1)SpringBoot高频:35个知识点(附解析) Spring Boot、Spring MVC 和 Spring 有什么区别? 什么是自动配置? 什么是 Spring Boot Stater ? 你能否举一…

Java代码审计——URL 跳转漏洞

目录 (一)URL 跳转漏洞简介 (二)URL 重定向 1.通过 ModelAndView 方式 2.通过返回 String 方式 3.使用 sendRedirect 方式 4.使用 RedirectAttributes 方式 5.通过…

elastic 概述

引言 1.1 海量数据 在海量数据中执行搜索功能时,如果使用MySQL,效率太低。 1.2 全文检索 在海量数据中执行搜索功能时,如果使用MySQL,效率太低。 1.3 高亮显示 将搜索关键字,以红色的字体展示。 ES概述 ES 也是一个n…

加锁和解锁-ReentrantLock详解-AQS-并发编程(Java)

文章目录1 AQS1.1 概念1.2 两种锁机制1.3 公平锁和非公平锁1.3 锁竞争1.4 条件变量2 ReentrantLock2.1 简介2 加锁2.1 加锁成功2.2 加锁失败2.2.1 tryAcquire()2.2.2 addWaiter()2.2.3 acquireQueued()2.2.3.1 主方法2.2.3.2 shouldParkAfterFailedAcquire()2.2.3.3 parkAndChe…

LeetCode 84.柱状图中最大的矩形

今天还是分享一道才刷过的题目, 柱状图中最大的矩形,这道题根上一篇我分享的接雨水类似,都是可以用双指针,动态规划(双指针加备忘录),单调栈来算 这道题的话三种方法都写了,双指针会超时,优化一…

pdf生成:puppeteer

一、Puppeteer Puppeteer是Google Chrome团队出品的一款无界面Chrome工具,它提供了丰富的API,让开发者像鼠标一样控制浏览器的各种行为。Puppeteer是一个Node库,提供发了一个高级API来通过DevTools协议控制Chromium或Chrome。Puppeteer默认以…

SDN实战团技术分享(三十八):DPDK助力NFV与云计算

DPDK最初动机很简单,网络处理器的软件解决方案,证明IA多核处理器能够支撑高性能数据包处理。 什么是DPDK?对于用户来说,它可能是一个出色的包数据处理性能加速软件库;对于开发者来说,它可能是一个实践包处…

配置鼠标右键edit with notepad

注:notepad为一个轻量级的代码文本编辑器,还可以安装代码对比工具等,大大提供办公效率,十分方便。安装后,可能右键无法直接用notepad打开,需要在软件中,选择文件打开,本文介绍如果设…

内网Windows Git Server部署

疫情下,公司与家用电脑切换,导致代码更新接不上,最最最重要公司代码不能上传外网,因此内网 Git Server部署这稿子。 Server部署主要安装【Java、Git、TortoiseGit、Gitblit】前三为傻瓜安装,重点为Gitblit配置修改及部…

Flutter高仿微信-第36篇-单聊-语音通话

Flutter高仿微信系列共59篇,从Flutter客户端、Kotlin客户端、Web服务器、数据库表结构、Xmpp即时通讯服务器、视频通话服务器、腾讯云服务器全面讲解。 详情请查看 效果图: 目前市场上第三方音频接口的价格高的吓人 语音通话价格: 5元/千分钟…

大规模ddos攻击事件,ddos攻击会暴露ip吗

1月4日,谷歌云安全可靠性工程师Damian Menscher在推特上表示,根据CVE-2021-22205漏洞利用报告,有攻击者正在利用 GitLab 托管服务器上的安全漏洞来构建僵尸网络,并发起规模惊人的分布式拒绝服务攻击(DDoS)其…