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

Spring Boot 集成 RabbitMQ:消息生产与消费详解

在现代微服务架构中,消息队列扮演着至关重要的角色,RabbitMQ 是其中一种广泛使用的消息中间件。本文将详细介绍如何在 Spring Boot 项目中集成 RabbitMQ,实现消息的生产和消费,并提供相应的代码示例。

一、环境准备与依赖配置

首先,确保你的开发环境中安装了 RabbitMQ 和 Java。接着,在 Spring Boot 项目的 pom.xml 文件中添加 RabbitMQ 依赖:

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

二、RabbitMQ 配置

application.ymlapplication.properties 文件中配置 RabbitMQ 的连接信息:

spring:
  rabbitmq:
    host: 127.0.0.1
    port: 5672
    username: guest
    password: guest
    virtual-host: /

三、消息生产者

在 Spring Boot 中,可以使用 RabbitTemplate 来发送消息。以下是发送消息的示例代码:

import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MessageProducer {

    @Autowired
    private RabbitTemplate rabbitTemplate;

    public void sendMessage(String exchange, String routingKey, String message) {
        rabbitTemplate.convertAndSend(exchange, routingKey, message);
    }
}

四、消息消费者

在 Spring Boot 中,可以使用 @RabbitListener 注解来创建消息消费者。以下是消费者的基本使用姿势:

import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;

@Component
public class MessageConsumer {

    @RabbitListener(queues = "yourQueueName")
    public void receiveMessage(String message) {
        System.out.println("Received message: " + message);
    }
}

五、交换机、队列和绑定关系配置

在 Spring Boot 中,可以通过 Java 配置类来定义交换机、队列和绑定关系:

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.TopicExchange;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class RabbitMQConfig {

    @Bean
    public Queue myQueue() {
        return new Queue("myQueue", true);
    }

    @Bean
    public TopicExchange myExchange() {
        return new TopicExchange("myExchange");
    }

    @Bean
    public Binding binding() {
        return BindingBuilder.bind(myQueue()).to(myExchange()).with("routingKey");
    }
}

六、高级特性

消息确认机制

RabbitMQ 提供了自动和手动确认机制。以下是手动确认消息的示例:

@RabbitListener(queues = "yourQueueName")
public void receiveMessage(Message message, Channel channel) throws IOException {
    try {
        // 处理消息
        System.out.println("Received message: " + new String(message.getBody()));
        // 手动确认消息
        channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
    } catch (Exception e) {
        // 处理失败,重新放回队列
        channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);
    }
}

连接池与并发控制

可以通过配置连接池与并发处理,提升性能:

spring.rabbitmq.listener.simple.concurrency=5
spring.rabbitmq.listener.simple.max-concurrency=10
spring.rabbitmq.listener.simple.prefetch=1

七、总结

通过本文,你学习了如何在 Spring Boot 项目中集成 RabbitMQ,创建生产者与消费者模型。RabbitMQ 的消息队列模式帮助我们实现了系统的解耦和异步任务处理。主要步骤包括安装 RabbitMQ 和 Erlang、Spring Boot 中的基础配置和依赖、创建队列、交换机和绑定关系、创建生产者和消费者,实现消息发送与接收,以及使用控制器测试消息发送。高级配置部分还介绍了手动确认、连接池等功能,帮助你在实际项目中更灵活地应用 RabbitMQ。希望这篇教程能帮助你快速上手 RabbitMQ 和 Spring Boot 的集成!


http://www.kler.cn/a/397464.html

相关文章:

  • v-html 富文本中图片使用element-ui image-viewer组件实现预览,并且阻止滚动条
  • vue3【实战】切换全屏【组件封装】FullScreen.vue
  • 树状数组+概率论,ABC380G - Another Shuffle Window
  • 当微软windows的记事本被AI加持
  • 【项目开发】Web App vs Native App,开发者作何选择?
  • 探索大规模语言模型(LLM)在心理健康护理领域中的应用与潜力
  • MySQL初学之旅(3)约束
  • CentOS8 启动错误,enter emergency mode ,开机直接进入紧急救援模式,报错 Failed to mount /home 解决方法
  • Java 简单家居开关系统
  • HTML之表格学习记录
  • fine_tune_tansat2
  • 如何利用知识中台实现客户服务自动化?
  • SpringCloud-使用FFmpeg对视频压缩处理
  • WebRTC视频 05 - 视频采集类 VideoCaptureDS 下篇
  • STM32G4的数模转换器(DAC)的应用
  • 从客户需求视角去认识ZLG | 边缘计算网关多种应用
  • 2019计挑赛c语言
  • python的matplotlib实现数据分析绘图
  • 算法---找出一组序列中的第k小(大)的元素
  • 每日算法一练:剑指offer——栈与队列篇(1)
  • OTX 架构开发需求分析
  • JAVA_单例模式
  • 安全生产管理的重要性:现状、痛点与改进之路
  • Android 12.0 第三方app授予DeviceOwner权限调用系统reboot,显示隐藏app,锁屏,禁用app等功能系统层部分实现
  • Java中的HTML元素设置:背景、列表与超链接
  • Docker占用空间太大磁盘空间不足清理妙招