springboot整合消息隊列RabbitMQ
前言:
RabbitMQ常用的三種Exchange Type:fanout、direct、topic。
- fanout:把所有發(fā)送到該Exchange的消息投遞到所有與它綁定的隊列中。
- direct:把消息投遞到那些binding key與routing key完全匹配的隊列中。
- topic:將消息路由到binding key與routing key模式匹配的隊列中。
這里基于springboot整合? ?消息隊列??,測試這三種Exchange。
- 啟動RabbitMQ
雙擊運行rabbitmq-server.bat:

- SpringBoot整合RabbitMQ——Direct模式(默認模式)
創(chuàng)建springboot web項目——發(fā)送者springboot-sender
追加測試和rabbitmq所需的依賴:
<!-- 添加springboot對amqp的支持 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <!--添加測試包--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-test</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>5.0.9.RELEASE</version> </dependency>
修改配置文件application.yml 或 application.properties:
server: port: 7001 spring: application: name: spirngboot-sender rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest
發(fā)送的信息可以是基本數(shù)據(jù)類型也可以是對象,這里創(chuàng)建一個用戶對象
public class User implements Serializable{
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}創(chuàng)建一個配置類:SenderConfiguration.java
一個名為queue1的 隊列
@Configuration
public class SenderConfiguration {
@Bean
public Queue directQueue() {
return new Queue("queue1");
}
}創(chuàng)建一個發(fā)送信息類:SenderService.java
發(fā)送user對象給queue1隊列
@Component
public class SenderService {
@Autowired
private AmqpTemplate template;
public void sendUser() {
User user=new User();
user.setUsername("張三");
user.setPassword("123456");
template.convertAndSend("queue1",user);
}
}創(chuàng)建一個測試類:TestRabbitMQ.java
@SpringBootTest(classes=SpringbootSenderApplication.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class TestRabbitMQ {
@Autowired
private SenderService senderService;
@Test
public void testRabbit() {
senderService.sendUser();
}
}運行testRabbit方法:

創(chuàng)建springboot web項目——接收者springboot-receiver
修改配置文件application.yml 或 application.properties:
server: port: 7002 spring: application: name: spirngboot-receiver rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest
添加接收類:ReceiverService.java
@Component
public class ReceiverService {
@RabbitListener(queues="queue1")
public void receiveUser(User user) {
System.out.println("username:"+user.getUsername()+" password:"+user.getPassword());
}
}運行啟動類:SpringbootApplication.java,結(jié)果:


信息成功被接收。
SpringBoot整合RabbitMQ——Topic模式(模糊匹配)
步驟與Direct差不多。
發(fā)送者:
修改配置類SenderConfiguration.java:
創(chuàng)建兩個隊列 topic1,topic2,創(chuàng)建一個topic交換器,綁定交換機和隊列以及綁定規(guī)則
@Test
public void testRabbit() {
senderService.sendUser();
}@Bean(name="topic1")
public Queue topicQueue1() {
return new Queue("topic1");
}
@Bean(name="topic2")
public Queue topicQueue2() {
return new Queue("topic2");
}
@Bean
public TopicExchange exchange() {
//創(chuàng)建一個topic交換器
return new TopicExchange("topicExchange");
}
@Bean
Binding bindingExchangeTopic1(@Qualifier("topic1") Queue queueMessage, TopicExchange exchange) {
//設(shè)置topic1綁定規(guī)則
return BindingBuilder.bind(queueMessage).to(exchange).with("topic.queue");
}
@Bean
Binding bindingExchangeTopic2(@Qualifier("topic2") Queue queueMessages, TopicExchange exchange) {
//設(shè)置topic2綁定規(guī)則 *表示一個詞,#表示零個或多個詞
return BindingBuilder.bind(queueMessages).to(exchange).with("topic.#");
}修改發(fā)送類SenderService.java:
User user=new User();
user.setUsername("張三");
user.setPassword("123456");
//發(fā)送給topicExchange的交換機
template.convertAndSend("topicExchange","topic.queue",user);
template.convertAndSend("topicExchange","topic.anyting",user);運行testRabbit方法:

成功廣播出去兩條信息
接收者:
修改接收類ReceiverService.java:
@RabbitListener(queues="fanout1")
public void receiveFanout1(User user) {
System.out.println("隊列:fanout1 username:"+user.getUsername()+" password:"+user.getPassword());
}
@RabbitListener(queues="fanout2")
public void receiveFanout2(User user) {
System.out.println("隊列:fanout2 username:"+user.getUsername()+" password:"+user.getPassword());
}運行啟動類,結(jié)果:


消息成功被發(fā)送接收
到此這篇關(guān)于springboot整合消息隊列RabbitMQ的文章就介紹到這了,更多相關(guān)springboot整合RabbitMQ內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring Boot配置攔截器及實現(xiàn)跨域訪問的方法
這篇文章主要介紹了Spring Boot配置攔截器及實現(xiàn)跨域訪問的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12
Spring Boot2.0使用Spring Security的示例代碼
這篇文章主要介紹了Spring Boot2.0使用Spring Security的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-08-08
java多線程并發(fā)中使用Lockers類將多線程共享資源鎖定
Lockers在多線程編程里面一個重要的概念是鎖定,如果一個資源是多個線程共享的,為了保證數(shù)據(jù)的完整性,在進行事務性操作時需要將共享資源鎖定,這樣可以保證在做事務性操作時只有一個線程能對資源進行操作,下面看一個示例2014-01-01
java中超過long范圍的超大整數(shù)相加算法詳解(面試高頻)
這篇文章主要介紹了java中超過long范圍的超大整數(shù)相加算法(面試高頻),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08

