SpringBoot基于RabbitMQ实现异步请求处理

发布于:2025-06-11 ⋅ 阅读:(22) ⋅ 点赞:(0)

概述

本文档介绍如何在SpringBoot中实现基于RabbitMQ的异步处理架构,以提高系统并发处理能力。

架构设计

  • 接口层: 接收请求并进行数据校验
  • 消息队列: 使用RabbitMQ进行异步处理
  • 业务层: 执行具体的数据库交互逻辑

1. 项目依赖配置

Maven依赖

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

配置文件

spring:
  rabbitmq:
    # RabbitMQ 服务器的基础连接信息
    host: localhost           # RabbitMQ 服务器的主机地址,默认为本机
    port: 5672                # RabbitMQ 服务器的端口号,非管理界面端口(默认是5672)
    username: guest           # 登录 RabbitMQ 的用户名,默认为 guest
    password: guest           # 登录 RabbitMQ 的密码,默认为 guest
    virtual-host: /           # 使用的虚拟主机,默认为 "/"

    listener:
      simple:
        concurrency: 5          # 初始消费者数量,即启动时创建的消费者线程数
        max-concurrency: 10     # 最大消费者数量,用于动态扩展时的最大并发消费者数
        prefetch: 10            # 每个消费者一次从队列中预取的消息数量,用于控制消息的消费速率
        acknowledge-mode: auto  # 消息确认模式,auto 表示自动确认(适用于大多数场景),manual 需要手动调用确认

    template:
      retry:
        enabled: true           # 开启 RabbitTemplate 发送消息时的重试机制
        initial-interval: 1000   # 初始重试间隔时间,单位为毫秒(第一次失败后等待1秒重试)
        max-attempts: 3         # 最大重试次数(包括首次发送,共尝试3次)

2. RabbitMQ配置

RabbitConfig.java

package com.erp.common.config;

import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.QueueBuilder;
import org.springframework.amqp.rabbit.annotation.EnableRabbit;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.amqp.core.Queue;
import org.springframework.amqp.core.Binding;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * RabbitMQ配置类,用于定义消息队列、交换机和绑定关系
 */
@Configuration
@EnableRabbit
public class RabbitConfig {
   
    
    // 定义业务队列的名称
    public static final String BUSINESS_QUEUE = "busine