# FunctionCodeAndDoc **Repository Path**: lbj680517/function-code-and-doc ## Basic Information - **Project Name**: FunctionCodeAndDoc - **Description**: 功能代码(如消息队列:延迟队列、消息重试、死信队列,redisson等中间件使用以及一些功能性代码示例),一些文档 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-08-01 - **Last Updated**: 2026-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Function-Code-and-Doc 项目 README 本项目主要围绕 RabbitMQ 消息队列和 Redis 缓存两大技术展开,提供了多种消息队列模式的实现以及 Redis 的分布式锁、布隆过滤器、库存管理等实用功能。该项目适用于需要使用消息中间件进行解耦和流量削峰的场景,同时也适用于高并发下的缓存控制和数据一致性保障场景。 ## 一、主要功能模块 ### 1. RabbitMQ 消息队列支持 - **多种交换机模式支持**: - Direct Exchange(如业务队列、死信队列 DLX) - Delayed Exchange(延迟消息) - Topic Exchange(主题订阅,如北京、电子产品队列) - Fanout Exchange(广播模式,如日志和告警队列) - Headers Exchange(基于消息头的路由,区分优先级和普通队列) - **消息可靠性投递与重试机制**: - 支持消息确认(ACK) - 自动重试机制(最大重试次数控制) - 消息幂等性处理(通过 MessageId) - **生产者与消费者实现**: - `MqSender` 提供了多种发送方式,包括延迟消息、广播、带消息 ID 的消息等 - `MqReceiver` 实现了各种队列的消息消费逻辑,并包含重试和死信队列处理逻辑 - **监听配置类**: - `RabbitConfig` 定义了交换机、队列、绑定关系等基础配置 - `RabbitMessageListener` 提供通用消息处理逻辑,支持泛型处理器 ### 2. Redis 分布式控制 - **Redisson 分布式锁**: - 使用 `RedissonUtil` 提供基于 Redisson 的分布式锁实现 - 支持带等待时间和租约时间的锁机制,适用于高并发场景 - **Lua 脚本实现的原子锁**: - `RedisLuaLockUtil` 提供基于 Lua 脚本的分布式锁,确保锁的原子性和安全性 - **布隆过滤器**: - 提供两种实现: - `RedisBloomFilterComponent`:基于 Redis 的布隆过滤器,使用 HashUtil 进行哈希计算 - `RedissonBloomFilterComponent`:基于 Redisson 的布隆过滤器,支持集合删除和元素计数功能 - **库存管理与并发测试**: - `RedisService` 接口及其实现类 `RedisServiceImpl` 提供库存的获取与扣减功能 - 支持并发测试,验证 Redis 分布式锁在高并发下的表现 ### 3. 用户权限与数据过滤 - **安全上下文工具类**: - `SecurityContextHolder` 和 `SecurityUtils` 提供用户信息、Token、权限等的获取和设置功能 - **数据权限控制**: - 使用 `@DataPermission` 和 `@ModelDataPerm` 注解进行数据权限控制 - `MybatisDataFilterInterceptor` 拦截 SQL 查询,实现动态数据过滤 - `UserDataPermissionRule` 提供用户级别的列权限控制逻辑 ### 4. 基础类与工具类 - **通用响应结构**: - `Results` 类封装了统一的返回格式,支持成功/失败状态码、消息体、数据等字段 - **基础实体类**: - `BaseEntity` 提供了基础字段如创建人、更新人、备注、参数映射等,支持序列化和 JSON 忽略字段 - **通用工具类**: - `HashUtil`:提供 CRC32 和多哈希算法,用于布隆过滤器 - `SpringUtils`:Spring 容器工具类,用于获取 Bean、AOP 代理等 - `ServletUtils`:Web 请求工具类,用于获取请求参数、Session、响应写入等 ## 二、快速开始 ### 1. 项目依赖 确保已安装以下组件: - JDK 1.8+ - Spring Boot 2.x - Redis / Redisson - RabbitMQ ### 2. 启动项目 ```bash cd code mvn spring-boot:run ``` ### 3. RabbitMQ 测试接口 访问以下接口进行不同消息队列的测试: - `GET /rabbitmq/sendDelayedQueue`:发送延迟消息 - `GET /rabbitmq/sendDlqQueue`:发送进入死信队列的消息 - `GET /rabbitmq/sendWithMessageId`:发送带唯一 ID 的幂等消息 - `GET /rabbitmq/sendTopicMessage`:发送基于 Topic 的消息(可指定地区) - `GET /rabbitmq/sendFanoutMessage`:发送广播消息(所有 Fanout 队列都能收到) - `GET /rabbitmq/sendHeadersMessage`:发送基于 Header 的消息(区分优先级) - `GET /rabbitmq/sendAutoRetryMessage`:发送自动重试的消息 ### 4. Redis 测试接口 - `GET /redis/testRedissonConcurrentAccess`:测试 Redisson 分布式锁的并发处理 - `GET /redis/testRedisLuaLock`:测试基于 Lua 脚本的 Redis 分布式锁 - `POST /redis/reduce?productId=xxx&quantity=yyy`:扣减库存(测试高并发下的库存一致性) ## 三、测试与验证 ### 1. 消息队列测试 - 使用 RabbitMQ 管理界面查看消息是否正确进入指定队列 - 检查日志确认消息是否被正确消费 - 模拟网络异常或消息处理失败验证自动重试和死信队列机制 ### 2. Redis 功能测试 - 并发访问 `/redis/testRedissonConcurrentAccess` 和 `/redis/testRedisLuaLock`,验证锁机制 - 模拟多个线程同时扣减库存,确认 `reduceInventory` 方法的原子性 ### 3. 数据权限测试 - 实现 `UserDataPermissionRule`,在业务代码中注入并使用 `@DataPermission` 注解 - 拦截 SQL 语句,查看是否自动添加了权限过滤条件 ## 四、代码生成与配置 - `CodeGenerator` 类可用于生成实体、Mapper、Service 等基础代码 - `MybatisPlusConfig` 提供了 MyBatis-Plus 的配置(如分页插件) ## 五、注意事项 - RabbitMQ 的交换机、队列、路由键等配置在 `RabbitConfig` 类中定义 - Redisson 配置通过 `RedissonConfig` 类加载 - 布隆过滤器的误判率和容量可根据实际业务需求调整 - 分布式锁的超时时间、重试机制在 `RedisLuaLockUtil` 和 `RedissonUtil` 中定义 ## 六、适用场景 - RabbitMQ 适用于异步任务处理、事件驱动架构、服务间通信 - Redis 布隆过滤器可用于缓存穿透防护 - 分布式锁可用于控制并发访问、防止重复操作 - 数据权限模块可用于多租户系统或 RBAC 权限模型中数据隔离 ## 七、许可证 该项目遵循 Apache-2.0 协议,请参阅项目根目录下的 LICENSE 文件。