0


RabbitMQ系列【15】AmqpAdmin使用详解

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

文章目录

前言

在之前,我们都是通过注入

Bean

的方式去声明交换机、队列,应用启动时去自动创建。

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

RabbitMQ

提供的操作接口。

如果是基于

Spring Boot

,则可以直接使用其提供的

AmqpAdmin

,其对

RabbitMQ

的原生接口进行了二次封装,使用起来十分方便。

AmqpAdmin

接口,只有一个实现类

RabbitAdmin

,该接口源码如下:

publicinterfaceAmqpAdmin{voiddeclareExchange(Exchange var1);

    boolean deleteExchange(String var1);

    @Nullable
    Queue declareQueue();

    @Nullable
    String declareQueue(Queue var1);

    boolean deleteQueue(String var1);voiddeleteQueue(String var1, boolean var2, boolean var3);voidpurgeQueue(String var1, boolean var2);

    int purgeQueue(String var1);voiddeclareBinding(Binding var1);voidremoveBinding(Binding var1);

    @Nullable
    Properties getQueueProperties(String var1);

    @Nullable
    QueueInformation getQueueInfo(String var1);defaultvoidinitialize(){}}

可以看到接口中声明了很多交换机、队列的操作方法。使用时,只需要注入即可,

Spring Boot

已经帮我们做好了自动配置。

@AutowiredAmqpAdmin 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-KQQueue 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

容器中获取到所有的

Exchange

Queue

Binding

并初始化:

在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_43437874/article/details/128023325
版权归原作者 云烟成雨TD 所有, 如有侵权,请联系我们删除。

“RabbitMQ系列【15】AmqpAdmin使用详解”的评论:

还没有评论