当前位置: 首页 > article >正文

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

文章目录

  • 一、配置 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 {

    @Bean
    public 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.kler.cn/a/389902.html

相关文章:

  • Gurobi学术版+Anaconda安装步骤
  • 【小程序】封装网络请求request模块
  • PostgreSQL 开启密码验证插件
  • 腾讯云nginx SSL证书配置
  • 信号量和线程池
  • 【GPTs】MJ Prompt Creator:轻松生成创意Midjourney提示词
  • 安卓主板_基于联发科MTK MT8788平台平板电脑方案_安卓核心板开发板定制
  • map映射
  • [C++]——位图与布隆过滤器
  • Kafka-broker处理producer请求-leader篇
  • Solon MVC 的 @Mapping 用法说明
  • 人工智能技术将逐步渗透到我们生活的每个角落
  • 《Rust语言圣经》Rust教程笔记17:2.Rust基础入门(2.6模式匹配)2.6.2解构Rust Option<T>
  • 三级等保安全解决方案,实施方案,整改方案(Word,PPT等相关资料学习)
  • docker compose - 设置名字
  • 根文件系统ROOTFS
  • 前端跨域~简述
  • 技术整合与生态构建:Lyft与Mobileye引领自动驾驶新纪元
  • Git核心概念
  • 解决”重复文件名重命名“问题【根据Word系统方式】
  • Qt文件系统-二进制文件读写
  • 【Django】Clickjacking点击劫持攻击实现和防御措施
  • 数组类算法【leetcode】
  • 「IDE」VS2022插件 Visual Assist X 番茄助手介绍说明
  • Python小游戏24——小恐龙躲避游戏
  • 使用 Elasticsearch 构建食谱搜索(一)