概述
??Spring AMQP項目是將Spring的核心概念應(yīng)用于基于AMQP消息傳遞的解決方案惶我。它提供了一個“模板”作為用于發(fā)送和接收消息的高級抽象邮旷。它還通過“偵聽器容器”為消息驅(qū)動的POJO提供支持包竹。這些庫有助于AMQP資源的管理,同時促進(jìn)對依賴項注入和聲明性配置的使用。
??該項目包括兩個部分劫乱;spring-amqp是基礎(chǔ)抽象,spring-rabbit是RabbitMQ實現(xiàn)锥涕。
特征
- 偵聽器容器衷戈,用于異步處理入站消息
- 用于發(fā)送和接收消息的RabbitTemplate
- RabbitAdmin用于自動聲明隊列,交換和綁定
一站楚、注入依賴
高級消息隊列協(xié)議(AMQP)是面向消息中間件的與平臺無關(guān)的有線級別協(xié)議脱惰。Spring AMQP項目將Spring的核心概念應(yīng)用于基于AMQP的消息傳遞解決方案的開發(fā)。Spring Boot為通過RabbitMQ使用AMQP提供了許多便利窿春,包括spring-boot-starter-amqp“啟動器”拉一。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
二、配置屬性
RabbitMQ配置由外部配置屬性控制spring.rabbitmq.*旧乞。例如蔚润,您可以在聲明以下部分application.yml:
spring:
rabbitmq:
host: xxx.xxx.xxx.xxx
port: 5672
username: xxx
password: xxxxxx
三、配置消費者
創(chuàng)建消費者類Consumer尺栖,添加@Component
注解嫡纠,并在方法上添加@RabbitListener
注解表示該方法接收哪個隊列的消息
@Component
public class Consumer {
@RabbitListener(queues = "test-queue")
public void test(String message) {
System.out.println("test - " + message);
}
@RabbitListener(queues = "email-queue")
public void email(String message) {
System.out.println("email - " + message);
}
}
四、配置生產(chǎn)者
我們使用REST接口來生成消息延赌,由于RabbitMQ默認(rèn)使用Direct交換器除盏,若是不使用其他交換器可以不用額外配置直接通過隊列名進(jìn)行發(fā)送消息。
@RestController
public class MQController {
@Resource
private RabbitTemplate template;
@RequestMapping("/test")
public void test(@RequestParam String text) {
// 發(fā)送到test-queue隊列
template.convertAndSend("test-queue", text);
}
@RequestMapping("/email")
public void email(@RequestParam String email) {
// 發(fā)送到email-queue隊列
template.convertAndSend("email-queue", email);
}
}
五挫以、測試
訪問 http://localhost:8080/test?text=hello
可以看到消費者類向控制臺輸出:
訪問 http://localhost:8080/email?text=hello
可以看到消費者類向控制臺輸出:
用于消息是發(fā)送到RabbitMQ中者蠕,并由消費者類消費,所以生產(chǎn)者和消費者可存在在不同服務(wù)器或程序中掐松,只需要使用同一消息隊列即可踱侣。