# 张睿-周赛雅-张秋实-刘帅 **Repository Path**: level-23-java/zhangrui ## Basic Information - **Project Name**: 张睿-周赛雅-张秋实-刘帅 - **Description**: 好极了太妙了啦啦啦啦啦啦 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-05 - **Last Updated**: 2025-11-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 轻量级消息队列组件指南 ## 1. 组件概览 `mq-core` 提供基于内存 + 磁盘混合的 `PersistentMessageQueue` 实现,借助 Spring Boot 自动配置与 `MessageQueueTemplate` 向外暴露的同步接口即可在任意 Spring Boot 项目中发送与消费消息。组件默认的 `MessageQueueProperties` 支持调整容量与持久化文件位置(默认 `./data/mq/messages.log`)。 同时组件内置监控接口: * `/mq/monitor/status`:返回当前队列大小、容量、最后一次持久化时间与磁盘占用; * `/mq/monitor/messages`:预览最近 20 条待处理消息; * `/mq/console`:通过 `mq-monitor.html` 访问可视化控制台。 项目还提供 `mq-demo` 调用端,示例控制器位于 `com.example.demo.web.MessageDemoController`,支持: * 直接通过 `/api/messages` 提交 `payload`; * `/api/messages/dequeue` 接收消息; * `/api/messages/status` 查询状态; * `/api/messages/load-test` 发起并发生产/消费测试,测试结果中会返回吞吐量、完成时间、队列处理结果等 `LoadTestReport` 字段。 ## 2. 高性能 / 高并发方案分析 ### 2.1 适用场景 * 中小型微服务之间传递异步任务,队列写入频率可控制在几千条/秒; * 单节点后端仍需保证节点重启后不会丢失数据,`LinkedBlockingDeque` 结合磁盘追加与快照持久化可以在 JVM 崩溃后恢复; * 需要可视化监控队列状态的管理系统。 ### 2.2 方案特点 * **内存 + 磁盘混合**:`LinkedBlockingDeque` 本身支持并发读写,入队时异步追加磁盘,出队时写入 snapshot 确保一致性;通过 `ReentrantLock` 控制写入顺序; * **可调容量**:`MessageQueueProperties` 能调到 `10k+`(受限于内存与磁盘);高并发时也可以增加 `ThreadPoolTaskExecutor` 的线程池大小; * **高并发验证**:`mq-demo` 的 `load-test` 接口会启动多个生产与消费线程,`LoadTestReport` 包含 `throughputPerSecond`、`enqueued` 与 `dequeued`,可用于验证系统在不同线程数/消息数下的表现。 ### 2.3 局限性 * **单节点 & 有界队列**:当前实现只在单 JVM 内运行,适用于中等负载;超过 `capacity` 会拒绝新消息,需要上层做降级策略; * **磁盘 I/O**:持久化写入锁会在大量入队时成为瓶颈,建议启用快速固态盘或将磁盘写入交由独立线程/批量操作; * **顺序消费**:消费线程在 `load-test` 中按固定次数拉取,实际复杂业务可能需要更多幂等与重试保障; * **缺少分布式功能**:如果需要分布式消息、顺序广播等能力,需要在组件之外引入缓存/数据库中介或迁移到其他中间件如 Kafka。 ## 3. 验证示例(mq-demo) * 启动 `mq-demo`(`DemoApplication`),在 `application.properties` 设置 `mq.queue.storage-path` 或直接使用默认; * 使用 `curl`/Postman 访问: * `POST /api/messages` 提交 payload; * `POST /api/messages/load-test` 传入: ```json { "producerThreads": 32, "consumerThreads": 32, "messagesPerProducer": 500, "messagesPerConsumer": 500 } ``` * 返回 `LoadTestReport` 时含有 `durationMillis` 与 `throughputPerSecond`,用于评估响应性; * 同时打开 `/mq/console` 查看队列状态与磁盘占用。 通过上述元素即可完整体验消息队列组件、Web 控制台以及高并发性能验证能力。