这篇文章是关于如何使用 Spring Boot 应用程序连接 RabbitMQ AMQP 服务器并将消息从应用程序发布到 RabbitMQ 服务器的介绍。
RabbitMQ 是一个消息代理:它接受和转发消息。它实现了高级消息队列协议(AMQP)并用 Erlang 编程语言编写。
在继续下一步之前,请确保您已在本地计算机上安装了 RabbitMQ 服务器。
###我们将构建什么
我们将使用 Spring AMQP 的 RabbitTemplate
构建一个发布消息的 Spring Boot 应用程序。
###我们需要什么
JDK 1.8 or later
Spring Boot 2.2.6.RELEASE
Gradle 4+ or Maven 3.2+
RabbitMQ Server 3.8.x
Erlang 22.x
Your favourite IDE:
Spring Tool Suite (STS)
Eclipse
IntelliJ IDEA
以下是设置 Spring Boot + RabbitMQ 所需的基本依赖项,将它们添加到您的 pom.xml 中。
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 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.2.6.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<groupId>org.websparrow</groupId>
<artifactId>spring-boot-rabbit-mq</artifactId>
<version>0.0.1-SNAPSHOT</version>
<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-web</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
我们在 STS 4 IDE 中的应用程序的最终项目结构如下所示:
application.properties 文件将用于配置 Rabbit MQ 服务器详细信息,如端口、主机、用户名和密码。要发布消息,我们需要设置 AMQP 的交换、队列和路由键详细信息。
application.properties
#RabbitMQ Server properties
spring.rabbitmq.host= localhost
spring.rabbitmq.port= 5672
spring.rabbitmq.username= guest
spring.rabbitmq.password= guest
#AMQP properties
rabbitmq.exchange= websparrow.exchange
rabbitmq.queue= websparrow.queue
rabbitmq.routingKey= websparrow.routing.key
rabbitmq.exchange: 生产者发布消息的交换名称。
rabbitmq.queue: 消费者接收消息的队列名称。
rabbitmq.routingkey: 用于将消息从交换绑定到特定队列。
RabbitMQConfig
类用于为RabbitMQ服务器配置交换和队列,并借助路由密钥将它们绑定在一起。
RabbitMQConfig.java
package org.websparrow.config;
import org.springframework.amqp.*;
import org.springframework.beans.*;
import org.springframework.context.*;
import org.springframework.messaging.*;
@Configuration
public class RabbitMQConfig {
@Value("${rabbitmq.queue}")
private String queue;
@Value("${rabbitmq.exchange}")
private String exchange;
@Value("${rabbitmq.routingkey}")
private String routingKey;
@Bean
public TopicExchange getExchangeName() {
return new TopicExchange(exchange);
}
@Bean
public Queue getQueueName() {
return new Queue(queue);
}
@Bean
public Binding declareBinding() {
return BindingBuilder.bind(getQueueName()).to(getExchangeName())
.with(routingKey);
}
@Bean
public Jackson2JsonMessageConverter getMessageConverter() {
return new Jackson2JsonMessageConverter();
}
@Bean
public RabbitTemplate rabbitTemplate(final ConnectionFactory factory) {
final RabbitTemplate rabbitTemplate = new RabbitTemplate(factory);
rabbitTemplate.setMessageConverter(getMessageConverter());
return rabbitTemplate;
}
@Bean
public MappingJackson2MessageConverter consumerJackson2MessageConverter() {
return new MappingJackson2MessageConverter();
}
@Bean
public DefaultMessageHandlerMethodFactory messageHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(consumerJackson2MessageConverter());
return factory;
}
public String getRoutingKey() {
return routingKey;
}
public String getQueue() {
return queue;
}
public String getExchange() {
return exchange;
}
}
MessageSender
类将用于使用 RabbitTemplate
将消息从交换发布到队列。
MessageSender.java
package org.websparrow.service;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.stereotype.Service;
@Service
public class MessageSender {
public void sendMessage(RabbitTemplate template, String exchange, Object data,
String key) {
template.convertAndSend(exchange, key, data);
}
}
RabbitMQController
将公开端点以提供需要在 RabbitMQ 服务器上发布的数据。
RabbitMQController.java
package org.websparrow.controller;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.*;
import org.websparrow.config.RabbitMQConfig;
import org.websparrow.service.MessageSender;
@RestController
public class RabbitMQController {
@Autowired
private MessageSender messageSender;
@Autowired
private RabbitMQConfig rabbitMQConfig;
@Autowired
private RabbitTemplate rabbitTemplate;
@PostMapping("/send-message")
public Object sendMessage(@RequestBody String message) {
messageSender.sendMessage(rabbitTemplate, rabbitMQConfig.getExchange(),
message, rabbitMQConfig.getRoutingKey());
return "Message sent <" + message + ">";
}
}
###启动应用程序
SpringBootRabbitMQApp
类包含主要方法并负责启动应用程序。
SpringBootRabbitMQApp.java
package org.websparrow;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringBootRabbitMQApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootRabbitMQApp.class, args);
}
}
要测试应用程序,请通过执行上述类来启动 Spring Boot 应用程序,并按照以下步骤操作:
1. 打开 Postman 客户端并使用 POST 请求点击以下 URL。
URL: 本地主机:8080/send-message
消息:<您想发布的任何内容。>
2. 在 localhost:15672 登录到您的 RabbitMQ 服务器控制台。默认的用户名 和密码 是guest。
3. 点击 Queues 标签,你会发现队列中有一条消息。
4. 要检查消息内容,请单击队列名称<websparrow.queue> » 获取消息。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.websparrow.org/spring/spring-boot-rabbitmq-example
内容来源于网络,如有侵权,请联系作者删除!