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版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
20天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
36 4
|
17天前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
28 0
|
10天前
|
Java API Spring
在 Spring 配置文件中配置 Filter 的步骤
【10月更文挑战第21天】在 Spring 配置文件中配置 Filter 是实现请求过滤的重要手段。通过合理的配置,可以灵活地对请求进行处理,满足各种应用需求。还可以根据具体的项目要求和实际情况,进一步深入研究和优化 Filter 的配置,以提高应用的性能和安全性。
|
2天前
|
Java Spring
[Spring]aop的配置与使用
本文介绍了AOP(面向切面编程)的基本概念和核心思想。AOP是Spring框架的核心功能之一,通过动态代理在不修改原代码的情况下注入新功能。文章详细解释了连接点、切入点、通知、切面等关键概念,并列举了前置通知、后置通知、最终通知、异常通知和环绕通知五种通知类型。
|
18天前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
104 1
|
2月前
|
XML Java 数据格式
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
Spring 第二节内容补充 关于Bean配置的更多内容和细节 万字详解!
189 18
Spring IOC—基于XML配置Bean的更多内容和细节(通俗易懂)
ly~
|
2月前
|
消息中间件 搜索推荐 大数据
一般情况下在 RocketMQ 中添加 access key 的步骤: 一、确定配置文件位置 RocketMQ 的配置文件通常位于安装目录下的 conf 文件夹中。你需要找到 broker.conf 或相关的配置文件。 二、编辑配置文件 打开配置文件,查找与 ACL(访问控制列表)相关的配置部分。 在配置文件中添加以下内容:
大数据广泛应用于商业、金融、医疗和政府等多个领域。在商业上,它支持精准营销、客户细分及流失预测,并优化供应链管理;金融领域则利用大数据进行风险评估、市场预测及欺诈检测;医疗行业通过大数据预测疾病、提供个性化治疗;政府运用大数据进行城市规划和公共安全管理;工业领域则借助大数据进行设备维护、故障预测及质量控制。
ly~
67 2
|
2月前
|
前端开发 Java Spring
关于spring mvc 的 addPathPatterns 拦截配置常见问题
关于spring mvc 的 addPathPatterns 拦截配置常见问题
191 1
|
24天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
38 0
|
24天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
71 0