1. 程式人生 > 程式設計 >Spring整合RabbitMQ-01-RabbitAdmin使用

Spring整合RabbitMQ-01-RabbitAdmin使用

RabbitAdmin

使用

  1. autoStartup 必須要設為 true ,否則Spring容器不會載入RabbitAdmin類
  2. RabbitAdmin底層實現就是從Spring容器中獲取Exchange,Binding,RoutingKey以及Queue@Bean申明
  3. 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

Exchange

Queue

queue

繫結關係