概述
Spring AMQP项目是将Spring的核心概念应用于基于AMQP消息传递的解决方案。它提供了一个“模板”作为用于发送和接收消息的高级抽象。它还通过“侦听器容器”为消息驱动的POJO提供支持。这些库有助于AMQP资源的管理,同时促进对依赖项注入和声明性配置的使用。
该项目包括两个部分;spring-amqp是基础抽象,spring-rabbit是RabbitMQ实现。
特征
- 侦听器容器,用于异步处理入站消息
- 用于发送和接收消息的RabbitTemplate
- RabbitAdmin用于自动声明队列,交换和绑定
一、注入依赖
高级消息队列协议(AMQP)是面向消息中间件的与平台无关的有线级别协议。Spring AMQP项目将Spring的核心概念应用于基于AMQP的消息传递解决方案的开发。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
三、配置消费者
创建消费者类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);
}
}
四、配置生产者
我们使用REST接口来生成消息,由于RabbitMQ默认使用Direct交换器,若是不使用其他交换器可以不用额外配置直接通过队列名进行发送消息。
@RestController
public class MQController {
@Resource
private RabbitTemplate template;
@RequestMapping("/test")
public void test(@RequestParam String text) {
// 发送到test-queue队列
template.convertAndSend("test-queue", text);
}
@RequestMapping("/email")
public void email(@RequestParam String email) {
// 发送到email-queue队列
template.convertAndSend("email-queue", email);
}
}
五、测试
访问 http://localhost:8080/test?text=hello
可以看到消费者类向控制台输出:
访问 http://localhost:8080/email?text=hello
可以看到消费者类向控制台输出:
用于消息是发送到RabbitMQ中,并由消费者类消费,所以生产者和消费者可存在在不同服务器或程序中,只需要使用同一消息队列即可。
网友评论