SpringBoot开发——Spring Boot 3.3整合RabbitMQ构建高效稳定的消息队列系统

devtools/2024/11/17 2:04:03/

文章目录

  • 一、配置 RabbitMQ
  • 二、自动配置的核心组件
  • 三、发送消息至指定 Stream
  • 四、接收消息与 @RabbitListener 注解
  • 五、实现自定义 RabbitListenerContainerFactory
  • 六、消息重试机制
  • 七、总 结

消息队列在分布式系统中起着至关重要的作用,它能够解耦系统、削峰填谷,并提高系统的可靠性。而基于 AMQP(Advanced Message Queuing Protocol)协议RabbitMQ 是一个轻量级、高可靠的消息中间件。 Spring Boot 提供了 spring-boot-starter-amqp 依赖,使得 AMQPRabbitMQ 的集成变得非常便捷。

一、配置 RabbitMQ

Spring Boot 项目中,配置 RabbitMQ 非常简单。可以直接在 application.ymlapplication.properties 文件中定义 RabbitMQ 的连接信息:

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=secret

提示:如果需要通过 URI 进行连接,可以将这些配置聚合为一个地址属性 spring.rabbitmq.addresses。

此外,Spring Boot 提供的 RabbitProperties 类还支持 SSL、连接超时、心跳检测等高级选项。只需在 application.yml 中添加相应配置,即可大幅提高连接的安全性和稳定性。

二、自动配置的核心组件

Spring Boot 会自动配置一些核心的 RabbitMQ 组件,主要包括:

AmqpTemplate:用于发送消息到指定的队列。

AmqpAdmin:用于管理 RabbitMQ 队列、交换机等资源。

示例代码:

import org.springframework.amqp.core.AmqpAdmin;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.stereotype.Component;@Component
public class MyMessagingService {private final AmqpAdmin amqpAdmin;private final AmqpTemplate amqpTemplate;public MyMessagingService(AmqpAdmin amqpAdmin, AmqpTemplate amqpTemplate) {this.amqpAdmin = amqpAdmin;this.amqpTemplate = amqpTemplate;}public void sendMessage(String queue, String message) {this.amqpTemplate.convertAndSend(queue, message);}public void getQueueInfo(String queue) {this.amqpAdmin.getQueueInfo(queue);}
}

通过 AmqpTemplate 可以轻松将消息发送至指定队列,而 AmqpAdmin 则可以查询或管理队列的状态。

三、发送消息至指定 Stream

在某些应用场景下,可能需要将消息发送至指定的 Stream。可以在配置文件中添加如下内容:

spring.rabbitmq.stream.name=my-stream

这种方式通过一个集中的 Stream 管理消息流转,更适合在多节点分布式架构中进行高效通信。

四、接收消息与 @RabbitListener 注解

接收 RabbitMQ 消息的方式非常灵活。可以在任意 Bean 中通过 @RabbitListener 注解定义一个消息监听器。

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MyMessageListener {@RabbitListener(queues = "someQueue")public void processMessage(String content) {System.out.println("Received message: " + content);}
}

五、实现自定义 RabbitListenerContainerFactory

在实际应用中,可以自定义 RabbitListenerContainerFactory 来实现更复杂的配置。Spring Boot 提供了 SimpleRabbitListenerContainerFactoryConfigurerDirectRabbitListenerContainerFactoryConfigurer,可以通过配置工厂来绑定不同的消息转换器或监听器参数:

import org.springframework.amqp.rabbit.config.SimpleRabbitListenerContainerFactory;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.boot.autoconfigure.amqp.SimpleRabbitListenerContainerFactoryConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class RabbitConfig {@Beanpublic SimpleRabbitListenerContainerFactory myFactory(SimpleRabbitListenerContainerFactoryConfigurer configurer,ConnectionFactory connectionFactory) {SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();configurer.configure(factory, connectionFactory);factory.setMessageConverter(new MyCustomMessageConverter());return factory;}
}

六、消息重试机制

在消息处理中,偶尔会遇到网络异常或资源暂时不可用的情况。为了提高系统的可靠性,RabbitMQ 提供了消息重试机制。可以在 application.yml 中启用并配置重试机制:

spring.rabbitmq.template.retry.enabled=true
spring.rabbitmq.template.retry.initial-interval=2s
spring.rabbitmq.template.retry.max-attempts=3

默认情况下,Spring Boot 禁用了重试机制。开启重试机制后,可以在短时间内重发失败的消息,提高消息的可靠性和传递成功率。

七、总 结

Spring BootRabbitMQ 的结合能够显著简化消息队列系统的开发。通过合理配置和自动化管理,开发者可以快速构建出高效、可靠的分布式消息传递系统。在高并发环境下,RabbitMQ 的异步、解耦和消息重试机制能够显著提升系统的稳定性和性能。


http://www.ppmy.cn/devtools/134594.html

相关文章

MQTT协议解析 : 物联网领域的最佳选择

1. MQTT协议概述 1.1 MQTT协议是什么 MQTT : Message Queuing Telemetry Transport 模式 : 发布 / 订阅主题优点 : 代码量小、低带宽、实时可靠应用 : 物联网、小型设备、移动应用MQTT 常用端口 : 1883 MQTT是一个网络协议,和HTTP类似,因为轻量简单&…

UE5材质篇 4 材质表面雨滴打落

materials 101的教程的灵感,特此记录一下 教程里本质上其实是先实验确定了湿滑表面的roughness和specular的值metallic这些,然后根据time来给表面的某些点这几个属性进行变换,主要是roughness和normal的变化 具体的变化是依赖了一张noise&a…

k8s拓扑域 :topologyKey

主要用于定义Pod亲和性或反亲和性规则中的拓扑域,从而控制Pod在集群中的调度。 参数描述:仅支持在工作负载亲和/工作负载反亲和调度策略中使用。先圈定拓扑域(topologyKey)指定的范围,然后再选择策略定义的内容。 to…

macOS sw_vers 查看当前系统版本

macOS 命令行 查看当前系统版本 sw_vers ProductName: macOS ProductVersion: 15.1

STM32设计学生宿舍监测控制系统

目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 电路图采用Altium Designer进行设计: 三、实物设计图 四、程序源代码设计 五、获取资料内容 前言 随着科技的飞速发展和智能化时代的到来,学生宿舍的安全、舒适…

MATLAB中的绘图技巧

MATLAB作为一种强大的科学计算软件,不仅可以进行数据分析和模拟,还具有出色的绘图功能。本文介绍若干在MATLAB中绘图的技巧和方法,帮助使用者更好地呈现数据和结果 文章目录 基本绘图函数高级绘图技巧三维绘图动态绘图绘图工具结语 基本绘图函…

利用OpenAI进行测试需求分析——从电商网站需求到测试用例的生成

在软件测试工程师的日常工作中,需求分析是测试工作中的关键步骤。需求文档决定了测试覆盖的范围和测试策略,而测试用例的编写往往依赖于需求的准确理解。传统手工分析需求耗时长,尤其在面对大量需求和复杂逻辑时容易遗漏细节。本文将以电商网…

初识Linux · 信号产生

目录 前言: 预备知识 信号产生 前言: 前文已经将进程间通信介绍完了,介绍了相关的的通信方式。在本文介绍的是信号部分,那么一定有人会有问题是:信号和信号量之间的关系是什么呢?答案是,它们…