有道无术,术尚可求,有术无道,止于术。
前言
在之前,我们都是通过注入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
容器中获取到所有的 Exchange
、Queue
、Binding
并初始化:文章来源:https://www.toymoban.com/news/detail-400515.html
文章来源地址https://www.toymoban.com/news/detail-400515.html
到了这里,关于RabbitMQ系列【15】AmqpAdmin使用详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!