SpringBoot整合RabbitMQ示例詳解
SpringBoot整合RabbitMQ
1.生產(chǎn)者SpringBootProducer
1.1 創(chuàng)建工程并導(dǎo)入依賴
我們使用的springboot版本為2.5.6,其他都是根據(jù)spring-boot-starter-parent
自動選擇版本
引入以下工程即可
spring-boot-starter-test
用于測試junit
用于單元測試spring-boot-starter-amqp
SpringBoot和RabbitMQ的整合方案
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> </parent> <artifactId>springboot-producer</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <scope>test</scope> </dependency> </dependencies> </project>
1.2 創(chuàng)建配置文件并配置
SpringBoot配置文件名稱為application.yml
需要配置的內(nèi)容如下:
# 配置RabbitMQ的基本信息 spring: rabbitmq: # 地址 host: 192.168.52.128 # 端口 port: 5672 # 用戶名 username: admin # 密碼 password: admin # 虛擬機 virtual-host: /test
1.3 創(chuàng)建項目啟動類
@SpringBootApplication public class ProducerApplication { public static void main(String[] args) { SpringApplication.run(ProducerApplication.class, args); } }
1.4 創(chuàng)建RabbitMQ配置類
@Configuration public class RabbitMQConfig { // 配置代碼都寫在這里 }
(1)設(shè)置默認(rèn)的交換機的名稱和隊列名稱
/** * 默認(rèn)測試的交換機機名稱 * springboot_topic_exchange */ public static final String EXCHANGE_NAME = "springboot_topic_exchange"; /** * 默認(rèn)的隊列名稱 * springboot_root_queue */ public static final String QUEUE_NAME = "springboot_root_queue";
(2)創(chuàng)建通配符類型的交換機
/** * 創(chuàng)建交換機 * * @return 交換機 */ @Bean("bootExchange") public Exchange bootExchange() { // 創(chuàng)建一個通配符的交換機 return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); }
這里需要在bean上加上名稱(雖然如果沒有時會使用方法名,但是嚴(yán)謹(jǐn)),便于之后交換機和隊列綁定操作。
除了通配符交換機外,還支持
廣播型交換機
、定向型交換機
。
- 廣播型交換機
/** * 創(chuàng)建交換機 * * @return 交換機 */ @Bean("bootExchange") public Exchange bootExchange() { // 創(chuàng)建一個通配符的交換機 return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); }
- 定向型交換機
@Bean("directExchange") public Exchange directExchange() { return ExchangeBuilder.directExchange("direct_exchange").durable(true).build(); }
(3)創(chuàng)建一個隊列
/** * 創(chuàng)建隊列 * * @return 隊列 */ @Bean("bootQueue") public Queue bootQueue() { return QueueBuilder.durable(QUEUE_NAME).build(); }
(4)綁定交換機和隊列
/** * 綁定隊列和交換機 * 主要:隊列、交換機、routing key * * @return 綁定關(guān)系 */ @Bean public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs(); }
(5)完整配置類
@Configuration public class RabbitMQConfig { /** * 默認(rèn)測試的交換機機名稱 * springboot_topic_exchange */ public static final String EXCHANGE_NAME = "springboot_topic_exchange"; /** * 默認(rèn)的隊列名稱 * springboot_root_queue */ public static final String QUEUE_NAME = "springboot_root_queue"; /** * 創(chuàng)建交換機 * * @return 交換機 */ @Bean("bootExchange") public Exchange bootExchange() { // 創(chuàng)建一個通配符的交換機 return ExchangeBuilder.topicExchange(EXCHANGE_NAME).durable(true).build(); } /** * 創(chuàng)建隊列 * * @return 隊列 */ @Bean("bootQueue") public Queue bootQueue() { return QueueBuilder.durable(QUEUE_NAME).build(); } /** * 綁定隊列和交換機 * 主要:隊列、交換機、routing key * * @return 綁定關(guān)系 */ @Bean public Binding bindingQueueExchange(@Qualifier("bootQueue") Queue queue, @Qualifier("bootExchange") Exchange exchange) { return BindingBuilder.bind(queue).to(exchange).with("boot.#").noargs(); } }
1.5 測試發(fā)送消息
@SpringBootTest @RunWith(SpringRunner.class) public class ProducerTest { @Autowired private RabbitTemplate rabbitTemplate; @Test public void testSend() { rabbitTemplate.convertAndSend(RabbitMQConfig.EXCHANGE_NAME, "boot.name", "Spring Boot RabbitMQ"); } }
2.消費者SpringBootConsumer
2.1 創(chuàng)建工程并導(dǎo)入依賴
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.6</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>springboot-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot-consumer</name> <description>springboot-consumer</description> <properties> <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-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
PS:以上依賴是由springboot工程創(chuàng)建完成,和之前手動創(chuàng)建沒有本質(zhì)差別
2.2 創(chuàng)建配置文件并配置
SpringBoot配置文件名稱為application.yml
需要配置的內(nèi)容如下:
# 配置RabbitMQ的基本信息 spring: rabbitmq: # 地址 host: 192.168.52.128 # 端口 port: 5672 # 用戶名 username: admin # 密碼 password: admin # 虛擬機 virtual-host: /test
2.3 創(chuàng)建項目啟動類
@SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } }
2.3 創(chuàng)建監(jiān)聽器
@Component public class RabbitMQListener { @RabbitListener(queues = "springboot_root_queue") public void listenerQueue(Message message) { System.out.println("RabbitMQListener:" + new String(message.getBody())); } }
@RabbitListener
表示當(dāng)前方法監(jiān)聽對應(yīng)的隊列,并且支持多隊列。
2.4 run
控制臺如下:
RabbitMQListener:Spring Boot RabbitMQ
到此這篇關(guān)于SpringBoot整合RabbitMQ示例詳解的文章就介紹到這了,更多相關(guān)SpringBoot整合RabbitMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring使用AspectJ注解和XML配置實現(xiàn)AOP
這篇文章主要介紹了Spring使用AspectJ注解和XML配置實現(xiàn)AOP的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10Spring監(jiān)聽器及定時任務(wù)實現(xiàn)方法詳解
這篇文章主要介紹了Spring監(jiān)聽器及定時任務(wù)實現(xiàn)方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-07-07基于java SSM springboot實現(xiàn)景區(qū)行李寄存管理系統(tǒng)
這篇文章主要介紹了基于java SSM springboot實現(xiàn)的景區(qū)行李寄存管理系統(tǒng),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-08-08java.net.http.HttpClient使用示例解析
這篇文章主要為大家介紹了java.net.http.HttpClient使用示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08IntelliJ IDEA 設(shè)置代碼提示或自動補全的快捷鍵功能
這篇文章主要介紹了IntelliJ IDEA 設(shè)置代碼提示或自動補全的快捷鍵功能,需要的朋友可以參考下2018-03-03詳解Java中NullPointerException的處理方法
這篇文章將帶大家來單獨看一個很常見的異常--空指針異常,這個可以說是每個Java程序員都必知的異常,所以我們不得不單獨學(xué)習(xí)一下,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-08-08