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 wyg0405@gmail.com
 * @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, false));
        // 申明一个topic Exchange
        rabbitAdmin.declareExchange(new TopicExchange("testRabbitAdmin.exchange.topic", false, false));

        // 申明 name 一个queue
        rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.direct", false, false, false));
        // 申明 name 一个queue
        rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.fanout", false, false, false));
        // 申明 name 一个queue
        rabbitAdmin.declareQueue(new Queue("testRabbitAdmin.queue.topic", false, false, 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, false, false))
            .to(new TopicExchange("testRabbitAdmin.exchange.topic", false, false)).with("topicKey.#"));
        
        // 清空队列,先手工插入一条数据到testRabbitAdmin.queue.fanout
        rabbitAdmin.purgeQueue("testRabbitAdmin.queue.fanout", true);

    }

}

测试结果

Exchange

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4x0VKCmf-1575207582909)(http://bit.ly/34iRwtU)]

Queue

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PFQIlvbR-1575207582911)(http://bit.ly/2OfXsyc)]

绑定关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v0K8Jahq-1575207582911)(http://bit.ly/2qHsm9G)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uXFLFHQZ-1575207582912)(http://bit.ly/2DfY8gx)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DLfYZGgg-1575207582913)(http://bit.ly/2XIbzzr)]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值