使用AmqpAdmin創(chuàng)建驮宴,刪除Queue沛简,Exchanges,Binding贪壳。
1.注入 AmqpAdmin
@Autowired
AmqpAdmin amqpAdmin;
AmqpAdmin是由RabbitAutoConfiguration 自動(dòng)注入的饱亿。
Path:org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration
2.創(chuàng)建交換器Exchange
比如創(chuàng)建:DirectExchange
調(diào)用amqpAdmin的declareExchange方法。
package com.invi;
import com.invi.bean.Book;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
@RunWith(SpringRunner.class)
@SpringBootTest
public class Springboot02AmqpApplicationTests {
//使用*AmqpAdmin*創(chuàng)建闰靴,刪除Queue彪笼,Exchanges,Binding蚂且。
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createExchange() {
DirectExchange directExchange = new DirectExchange("AmqpAdmin-DirectExchange");
amqpAdmin.declareExchange(directExchange);
}
}
amqpAdmin.declareXXXX() 都是創(chuàng)建組件的方法哦配猫。
接口: org.springframework.amqp.core.Exchange
實(shí)現(xiàn)類:
- AbstractExchange (org.springframework.amqp.core)
- DirectExchange (org.springframework.amqp.core)
- FanoutExchange (org.springframework.amqp.core)
- CustomExchange (org.springframework.amqp.core)
- TopicExchange (org.springframework.amqp.core)
- HeadersExchange (org.springframework.amqp.core)
DirectExchange 可以通過構(gòu)造方法定制:
org.springframework.amqp.core.DirectExchange#DirectExchange(java.lang.String)
package org.springframework.amqp.core; import java.util.Map; public class DirectExchange extends AbstractExchange { public static final DirectExchange DEFAULT = new DirectExchange(""); public DirectExchange(String name) { super(name); } public DirectExchange(String name, boolean durable, boolean autoDelete) { super(name, durable, autoDelete); } public DirectExchange(String name, boolean durable, boolean autoDelete, Map<String, Object> arguments) { super(name, durable, autoDelete, arguments); } @Override public final String getType() { return ExchangeTypes.DIRECT; } }
運(yùn)行測試方法:
Name | Type | Features | Message rate in | Message rate out |
---|---|---|---|---|
(AMQP default) | direct | D | ||
AmqpAdmin-DirectExchange | direct | D | ||
amq.direct | direct | D | ||
amq.fanout | fanout | D | ||
amq.headers | headers | D | ||
amq.match | headers | D | ||
amq.rabbitmq.trace | topic | D I | ||
amq.topic | topic | D | ||
exchange.direct | direct | D | 0.00/s | 0.00/s |
發(fā)現(xiàn)已經(jīng)創(chuàng)建好新的Exchange:AmqpAdmin-DirectExchange ,類型 direct !
3.創(chuàng)建隊(duì)列Queue
編碼:
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createQueue() {
//通過構(gòu)造方法 定制隊(duì)列屬性
Queue queue = new Queue("AmqpAdmin-Queue", true);
amqpAdmin.declareQueue(queue);
}
Queue可以通過構(gòu)造方法定制:
package org.springframework.amqp.core; import java.util.Map; import org.springframework.util.Assert; public class Queue extends AbstractDeclarable { private final String name; private final boolean durable; private final boolean exclusive; private final boolean autoDelete; private final java.util.Map<java.lang.String, java.lang.Object> arguments; public Queue(String name) { this(name, true, false, false); } public Queue(String name, boolean durable) { this(name, durable, false, false, null); } /** * 構(gòu)造一個(gè)新的隊(duì)列,給定一個(gè)名稱膘掰、持久性章姓、排他性和自動(dòng)刪除標(biāo)志。 * @param name 指定隊(duì)列的名稱识埋。 * @param durable 為true如果我們聲明一個(gè)耐久隊(duì)列(該隊(duì)列將在服務(wù)器重啟后存活) * @param exclusive 為true如果我們聲明了一個(gè)獨(dú)占隊(duì)列(隊(duì)列只會(huì)被聲明者使用連接) * @param autoDelete為true 如果服務(wù)器在隊(duì)列不再使用時(shí)應(yīng)該刪除隊(duì)列凡伊, */ public Queue(String name, boolean durable, boolean exclusive, boolean autoDelete) { this(name, durable, exclusive, autoDelete, null); } ...... }
運(yùn)行測試方法:
Overview | Messages | Message rates | +/- | |||||
---|---|---|---|---|---|---|---|---|
Name | Features | State | Ready | Unacked | Total | incoming | deliver / get | ack |
AmqpAdmin-Queue | D | idle | 0 | 0 | 0 | |||
unionpaysmart | D | idle | 1 | 0 | 1 | 0.00/s | 0.00/s | 0.00/s |
unionpaysmart.news | D | idle | 1 | 0 | 1 | 0.00/s | 0.00/s | 0.00/s |
invi | D | idle | 1 | 0 | 1 | 0.00/s | 0.00/s | 0.00/s |
invi.emps | D | idle | 1 | 0 | 1 | 0.00/s | 0.00/s | 0.00/s |
invi.idea | D | idle | 1 | 0 | 1 | 0.00/s | 0.00/s | 0.00/s |
invi.news | D | idle | 0 | 0 | 0 | 0.00/s | 0.00/s | 0.00/s |
隊(duì)列 AmqpAdmin-Queue 已經(jīng)被創(chuàng)建。
4.將交換器和隊(duì)列綁定窒舟。
編碼:
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createBinding() {
Binding binding
= new Binding("AmqpAdmin-Queue", Binding.DestinationType.QUEUE, "AmqpAdmin-DirectExchange", "AmqpAdmin-routingKey", null);
amqpAdmin.declareBinding(binding);
}
構(gòu)造Binding:
String destination 目的地
- 和那個(gè)隊(duì)列綁定:AmqpAdmin-Queue 系忙,......
DestinationType destinationType 目的地類型( QUEUE, EXCHANGE;)
- Binding.DestinationType.QUEUE
- Binding.DestinationType.EXCHANGE
String exchange 交換器名
String routingKey 路由鍵 自定義名字
Map<String, Object> arguments 參數(shù)頭信息 ,沒有的話 寫NULL
源碼Binding類:
package org.springframework.amqp.core; import java.util.Map; public class Binding extends AbstractDeclarable { public enum DestinationType { QUEUE, EXCHANGE; } private final String destination; private final String exchange; private final String routingKey; private final Map<String, Object> arguments; private final DestinationType destinationType; public Binding(String destination, DestinationType destinationType, String exchange, String routingKey, Map<String, Object> arguments) { this.destination = destination; this.destinationType = destinationType; this.exchange = exchange; this.routingKey = routingKey; this.arguments = arguments; } public String getDestination() { return this.destination; } public DestinationType getDestinationType() { return this.destinationType; } public String getExchange() { return this.exchange; } public String getRoutingKey() { return this.routingKey; } public Map<String, Object> getArguments() { return this.arguments; } public boolean isDestinationQueue() { return DestinationType.QUEUE.equals(this.destinationType); } @Override public String toString() { return "Binding [destination=" + this.destination + ", exchange=" + this.exchange + ", routingKey=" + this.routingKey + "]"; } }
Exchange: AmqpAdmin-DirectExchange 默認(rèn)
... no bindings ...
運(yùn)行測試方法:
To | Routing key | Arguments |
---|---|---|
AmqpAdmin-Queue | AmqpAdmin-routingKey |
至此已經(jīng)完成了:AmqpAdmin-DirectExchange 和 AmqpAdmin-Queue的綁定惠豺。