我是靠谱客的博主 喜悦发卡,最近开发中收集的这篇文章主要介绍RabbitMQ系列【15】AmqpAdmin使用详解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

文章目录

    • 前言
    • 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并初始化:

在这里插入图片描述

最后

以上就是喜悦发卡为你收集整理的RabbitMQ系列【15】AmqpAdmin使用详解的全部内容,希望文章能够帮你解决RabbitMQ系列【15】AmqpAdmin使用详解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部