Spring Boot 中的 RabbitMQ 消息发送配置

简介: Spring Boot 中的 RabbitMQ 消息发送配置

Spring Boot 中的 RabbitMQ 消息发送配置


1. 什么是 RabbitMQ


RabbitMQ 是一个开源的消息代理系统,它实现了 AMQP(高级消息队列协议)标准,并支持多种消息传输协议。它具有高可用性、可扩展性和可靠性,广泛应用于分布式系统、微服务架构、异步任务处理、日志收集等场景。


RabbitMQ 的核心概念包括:


  • Producer:消息生产者,负责将消息发送到 RabbitMQ 服务器。
  • Exchange:消息交换机,负责接收 Producer 发送的消息,并将其路由到一个或多个 Queue。
  • Queue:消息队列,负责存储消息。
  • Consumer:消息消费者,从 Queue 中获取消息并进行处理。


d3ba9f5eae8ad4a873a165002d172075_1b111d975fc740eabfe8e2eb8fc2d9b4.png


2. Spring Boot 中的 RabbitMQ 自动配置


Spring Boot 提供了对 RabbitMQ 的自动配置支持,通过在配置文件中添加以下配置,即可快速集成 RabbitMQ:


spring.rabbitmq.host=your-host
spring.rabbitmq.port=your-port
spring.rabbitmq.username=your-username
spring.rabbitmq.password=your-password

Spring Boot 的 RabbitMQ 自动配置会根据上述配置创建一个 ConnectionFactory 对象,并使用 RabbitTemplate 封装一些常用的 RabbitMQ 操作,例如发送消息、接收消息等。


在使用 Spring Boot 的 RabbitMQ 自动配置时,我们需要添加 RabbitMQ 的依赖:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-amqp</artifactId>
</dependency>


3. RabbitMQ 消息发送配置


3.1. 发送消息

在 Spring Boot 中,我们可以使用 RabbitTemplate 来发送消息。RabbitTemplate 提供了一个简单的 API,用于发送消息到 RabbitMQ 服务器。以下是一个发送消息的示例代码:


@Autowired
private RabbitTemplate rabbitTemplate;
public void sendMessage(String message) {
    rabbitTemplate.convertAndSend("exchangeName", "routingKey", message);
}

在这个示例中,我们使用 RabbitTemplate 的 convertAndSend 方法来发送消息。其中,exchangeName 表示消息交换机的名称,routingKey 表示消息路由键,message 表示要发送的消息内容。


3.2. 消息确认

RabbitMQ 提供了消息确认机制,用于确保消息被正确地发送到 RabbitMQ 服务器。在 Spring Boot 中,我们可以通过配置 RabbitTemplate 来开启消息确认机制。以下是一个开启消息确认机制的示例代码:


@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
        if (!ack) {
            log.error("Message send failed: {}", cause);
        }
    });
    return rabbitTemplate;
}

10

在这个示例中,我们通过设置 RabbitTemplate 的 ConfirmCallback 来开启消息确认机制。当消息发送成功时,ConfirmCallback 的 ack 参数为 true,否则为 false,cause 参数表示发送失败的原因。


3.3. 消息序列化

在 Spring Boot 中,我们可以使用 MessageConverter 来对消息进行序列化和反序列化。默认情况下,Spring Boot 使用 SimpleMessageConverter 对消息进行序列化和反序列化。如果我们需要使用自定义的序列化方式,可以实现 MessageConverter 接口,并将其配置到 RabbitTemplate 中。以下是一个自定义的消息序列化器的示例代码:


public class MyMessageConverter implements MessageConverter {
    @Override
    public Message toMessage(Object object, MessageProperties messageProperties) throws MessageConversionException {
        // 将对象转换为字节数组
        byte[] body = new byte[0];
        try {
            ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
            ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
            objectOutputStream.writeObject(object);
            objectOutputStream.flush();
            body = byteArrayOutputStream.toByteArray();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 创建 Message 对象
        Message message = new Message(body, messageProperties);
        return message;
    }
    @Override
    public Object fromMessage(Message message) throws MessageConversionException {
        // 将字节数组转换为对象
        Object object = null;
        try {
            ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(message.getBody());
            ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
            object = objectInputStream.readObject();
        } catch (IOException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return object;
    }
}
@Bean
public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
    RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
    rabbitTemplate.setMessageConverter(new MyMessageConverter());
    return rabbitTemplate;
}

在这个示例中,我们实现了一个自定义的消息序列化器 MyMessageConverter,并将其配置到 RabbitTemplate 中。在 MyMessageConverter 中,我们通过实现 toMessage 和 fromMessage 方法来对消息进行序列化和反序列化。


4. 总结


Spring Boot 提供了对 RabbitMQ 的自动配置支持,可以帮助我们快速集成 RabbitMQ,并提供一些默认的配置,例如连接池、消息确认机制、消息序列化等。在使用 Spring Boot 的 RabbitMQ 自动配置时,我们可以使用 RabbitTemplate 来发送消息,也可以通过配置 RabbitTemplate 来开启消息确认机制和使用自定义的消息序列化器。


如果您正在开发一个基于 Spring Boot 的应用程序,并需要使用 RabbitMQ 来实现消息发送功能,那么 Spring Boot 中的 RabbitMQ 自动配置是您的一个不错的选择。


相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
3月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
3月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
2月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
286 5
|
3月前
|
消息中间件 Java Kafka
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
本文深入解析了 Kafka 和 RabbitMQ 两大主流消息队列在 Spring 微服务中的应用与对比。内容涵盖消息队列的基本原理、Kafka 与 RabbitMQ 的核心概念、各自优势及典型用例,并结合 Spring 生态的集成方式,帮助开发者根据实际需求选择合适的消息中间件,提升系统解耦、可扩展性与可靠性。
222 1
消息队列比较:Spring 微服务中的 Kafka 与 RabbitMQ
|
3月前
|
消息中间件 存储 Java
RabbitMQ 和 Spring Cloud Stream 实现异步通信
本文介绍了在微服务架构中,如何利用 RabbitMQ 作为消息代理,并结合 Spring Cloud Stream 实现高效的异步通信。内容涵盖异步通信的优势、RabbitMQ 的核心概念与特性、Spring Cloud Stream 的功能及其与 RabbitMQ 的集成方式。通过这种组合,开发者可以构建出具备高可用性、可扩展性和弹性的分布式系统,满足现代应用对快速响应和可靠消息传递的需求。
198 2
RabbitMQ 和 Spring Cloud Stream 实现异步通信
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
546 5
|
3月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
184 0
探索Spring Boot的@Conditional注解的上下文配置
|
5月前
|
消息中间件 数据管理 Serverless
阿里云消息队列 Apache RocketMQ 创新论文入选顶会 ACM FSE 2025
阿里云消息团队基于 Apache RocketMQ 构建 Serverless 消息系统,适配多种主流消息协议(如 RabbitMQ、MQTT 和 Kafka),成功解决了传统中间件在可伸缩性、成本及元数据管理等方面的难题,并据此实现 ApsaraMQ 全系列产品 Serverless 化,助力企业提效降本。
|
消息中间件 JSON Java
开发者如何使用轻量消息队列MNS
【10月更文挑战第19天】开发者如何使用轻量消息队列MNS
842 94