目錄
SpringAMQP是什么
為什么采用SpringAMQP
SpringAMQP應用
準備springBoot工程
實現消息發送
SpringAMQP是什么
Spring AMQP是Spring框架下用于簡化AMQP(高級消息隊列協議)應用開發的一套工具集,主要針對RabbitMQ等消息中間件的集成。它提供了基于模板的消息發送和接收方法(如AmqpTemplate),以及用于配置和管理交換機、隊列及其綁定關系的機制。通過Spring AMQP,開發者可以方便地將消息隊列功能整合到Spring項目中。
為什么采用SpringAMQP
將來我們開發業務功能的時候,肯定不會在控制臺收發消息,而是應該基于編程的方式。RabbitMQ官方提供的Java客戶端編碼相對復雜,一般生產環境下我們更多會結合Spring來使用。而Spring的官方剛好基于RabbitMQ提供了這樣一套消息收發的模板工具:SpringAMQP。并且還基于SpringBoot對其實現了自動裝配,使用起來非常方便。
SpringAMQP提供了三個功能:
1.自動聲明隊列、交換機及其綁定關系
2.基于注解的監聽器模式,異步接收消息
3.封裝了RabbitTemplate工具,用于發送消息
SpringAMQP應用
準備springBoot工程
新建一個springboot工程,包括三部分:
-
mq-demo:父工程,管理項目依賴
-
publisher:消息的發送者
-
consumer:消息的消費者
工程目錄如圖所示:
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>cn.itcast.demo</groupId><artifactId>mq-demo</artifactId><version>1.0-SNAPSHOT</version><modules><module>publisher</module><module>consumer</module></modules><packaging>pom</packaging><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.12</version><relativePath/></parent><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--AMQP依賴,包含RabbitMQ--><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></dependency></dependencies>
</project>
如此,子工程中就可以直接使用SpringAMQP。
實現消息發送
首先配置MQ地址,在publisher
服務的application.yml和
consumer
服務的application.yml
中添加配置:
spring:rabbitmq:host: 192.168.12.101 # 你的虛擬機IPport: 5672 # 端口virtual-host: /user # 你的虛擬主機username: user # 用戶名password: 123 # 密碼
然后在publisher
服務中編寫測試類SpringAmqpTest
,并利用RabbitTemplate
實現消息發送:
@SpringBootTest
class SpringAmqpTest {@Autowiredprivate RabbitTemplate rabbitTemplate;@Testpublic void testSimpleQueue() {// 隊列名稱String queueName = "hello.queue";// 消息String message = "hello rabbitmq";// 發送消息rabbitTemplate.convertAndSend(queueName, message);}
}
運行后,打開控制臺,可以看到消息已經發送到隊列中:
當然,我們可以在consumer
服務的consumer.listener
包中新建一個類SpringRabbitListener來接收
,代碼如下:
@Component
@Slf4j
public class SpringRabbitListener {@RabbitListener(queues = "hello.queue")public void listenSimpleQueue(String msg) {log.info("消費者收到消息:{}", msg);}
}
啟動ConsumerApplication,控制臺顯示如下:
解讀:實現SpringAMQP對RabbitMQ的消息收發的測試。