15、RabbitMQ基础: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并初始化:

*

版权声明:本文不是「本站」原创文章,版权归原作者所有 | 原文地址: