一.pom.xml
spring boot项目
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.wj</groupId>
<artifactId>spring-amqp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-amqp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>5.7.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
二.配置类
@Configuration public class RabbitMQConfig { @Bean public ConnectionFactory connectionFactory(){ CachingConnectionFactory connectionFactory = new CachingConnectionFactory(); connectionFactory.setAddresses("192.168.10.132:5672"); connectionFactory.setUsername("guest"); connectionFactory.setPassword("guest"); connectionFactory.setVirtualHost("/"); return connectionFactory; } @Bean public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){ RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory); //autoStartup必须要设置为true,否则Spring容器不会加载RabbitAdmin类 rabbitAdmin.setAutoStartup(true); return rabbitAdmin; } }
三.RabbitAdmin测试
@SpringBootTest class SpringAmqpApplicationTests { @Autowired private RabbitAdmin rabbitAdmin; @Test public void testAdmin(){ //声明交换机 rabbitAdmin.declareExchange(new DirectExchange("admin.direct",false,false)); //声明队列 rabbitAdmin.declareQueue(new Queue("admin.queue",false)); rabbitAdmin.declareExchange(new DirectExchange("admin.topic",false,false)); rabbitAdmin.declareQueue(new Queue("admin.topic.queue",false)); //队列与交换机绑定 rabbitAdmin.declareBinding( new Binding("admin.queue",//Queue名 Binding.DestinationType.QUEUE,//QUEUE绑定 "admin.direct",//exchange名 "direct", //路由 new HashMap<>()));//参数 //链式编程 rabbitAdmin.declareBinding( BindingBuilder.bind(new Queue("admin.topic.queue",false)) .to(new TopicExchange("admin.topic",false,false)) .with("topic.#") ); //清空队列 rabbitAdmin.purgeQueue("admin.topic.queue",false); } }
四.声明
使用Spring AMQP可以使用如下方式去声明Exchange、queue。
在配置类中加入Bean的方式。
@Bean public TopicExchange topicExchange(){ return new TopicExchange("amqp.bean.topic",true,false); } @Bean public Queue queue(){ return new Queue("queue",true) ; } @Bean public Binding binding(){ return BindingBuilder.bind(this.queue()).to(topicExchange()).with("amqp.#"); }
运行springboot test方法,会发现控制台以及将exchange和queue创建完成。