RabbitMQ系列之五 SpringBoot RabbitMQ整合
阿新 • • 發佈:2018-12-01
專案git地址:https://github.com/gitcaiqing/SpringBootRabbitMQ
1.專案結構
2.建立SpringBoot專案並引入RabbitMQ
3.專案pom.xml如下
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.sc</groupId> <artifactId>SpringBootRabbitMQ</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>SpringBootRabbitMQ</name> <description>Demo project for Spring Boot RabbitMQ</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.17.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-web</artifactId> <version>1.2.4</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
4.申明交換機、佇列、佇列繫結等
package com.sc; import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @SpringBootApplication public class SpringBootRabbitMqApplication { public static void main(String[] args) { SpringApplication.run(SpringBootRabbitMqApplication.class, args); } private static final String exchangeName = "SpringbootRabbitMQ-Topics-Exchange"; private static final String queueName = "SpringbootRabbitMQ-Topics-Queue"; //宣告交換機 @Bean TopicExchange exchange(){ return new TopicExchange(exchangeName, true, false); } //宣告佇列 @Bean Queue queue() { return new Queue(queueName, true); } //佇列繫結 @Bean Binding binding(Queue queue, TopicExchange exchange) { //繫結佇列到交換機並指定routingKey return BindingBuilder.bind(queue).to(exchange).with("topic.#"); } }
5.生產者
package com.sc.producter; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @Component public class TopicsProducter { private static final String exchangeName = "SpringbootRabbitMQ-Topics-Exchange"; @Autowired private AmqpTemplate amqpTemplate; public void send(String message) { this.amqpTemplate.convertAndSend(exchangeName, "topic.message", message);; } }
6.消費者
package com.sc.consumer;
import org.springframework.amqp.rabbit.annotation.RabbitHandler;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;
@RabbitListener(queues="SpringbootRabbitMQ-Topics-Queue")
@Component
public class TopicsConsumer {
@RabbitHandler
public void receive(String msg) {
System.out.println("消費者消費訊息:"+msg);
}
}
7.測試
package com.sc.controller;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import com.sc.producter.TopicsProducter;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class TopicsControllerTest {
@Autowired
private TopicsProducter topicsProducter;
@Test
public void testTopicsTest() {
String msg = "SpringBoot-RabbitMQ Topics Hello !";
topicsProducter.send(msg);
}
}