Spring整合RabbitMQ-01-RabbitAdmin使用
阿新 • • 發佈:2020-06-24
RabbitAdmin
使用
-
autoStartup
必須要設為true
,否則Spring容器不會載入RabbitAdmin類 -
RabbitAdmin
底層實現就是從Spring
容器中獲取Exchange
,Binding
,RoutingKey
以及Queue
的@Bean
申明 - RabbitTemplate的execute方法執行對應的申明,修改,刪除等一系列RabbitMQ基礎功能操作
程式碼示例
RabbitConfig
package com.wyg.rabbitmq.springamqp;
import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* RabbitAdmin
*
* @author [email protected]
* @date 2019-11-25 15:11
* @since JDK1.8
* @version V1.0
*/
@Configuration
public class RabbitConfig {
@Bean
public ConnectionFactory connectionFactory() {
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory();
cachingConnectionFactory.setAddresses("localhost:5672");
cachingConnectionFactory.setUsername("guest" );
cachingConnectionFactory.setPassword("guest");
cachingConnectionFactory.setVirtualHost("/");
return cachingConnectionFactory;
}
@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
/*
* autoStartup 必須要設為 true ,否則Spring容器不會載入RabbitAdmin類
*/
rabbitAdmin.setAutoStartup(true);
return rabbitAdmin;
}
}
複製程式碼
RabbitConfigTest
package com.wyg.rabbitmq.springamqp;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.core.RabbitAdmin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class RabbitConfigTest {
@Autowired
RabbitAdmin rabbitAdmin;
@Test
public void testRabbitAdmin() {
// 申明一個direct Exchange
rabbitAdmin.declareExchange(new DirectExchange("testRabbitAdmin.exchage.direct",false,false));
// 申明一個fanout Exchange
rabbitAdmin.declareExchange(new FanoutExchange("testRabbitAdmin.exchage.fanout",false));
// 申明一個topic Exchange
rabbitAdmin.declareExchange(new TopicExchange("testRabbitAdmin.exchange.topic",false));
// 申明 name 一個queue
rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.direct",false));
// 申明 name 一個queue
rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.fanout",false));
// 申明 name 一個queue
rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.topic",false));
// 繫結
rabbitAdmin.declareBinding(new Binding("testRabbitAdmin.queue.direct",Binding.DestinationType.QUEUE,"testRabbitAdmin.exchage.direct","direct.abc",null));
// 使用BindingBuilder繫結
rabbitAdmin.declareBinding(BindingBuilder.bind(new Queue("testRabbitAdmin.queue.topic",false))
.to(new TopicExchange("testRabbitAdmin.exchange.topic",false)).with("topicKey.#"));
// 清空佇列,先手工插入一條資料到testRabbitAdmin.queue.fanout
rabbitAdmin.purgeQueue("testRabbitAdmin.queue.fanout",true);
}
}
複製程式碼
測試結果
Exchange
Queue
繫結關係