有道无术,术尚可求,有术无道,止于术。
文章目录
前言
在之前,我们都是通过注入
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
并初始化:
版权归原作者 云烟成雨TD 所有, 如有侵权,请联系我们删除。