# Spring模拟topic消息中间件 **Repository Path**: hongfff/Middleware_Lab_2 ## Basic Information - **Project Name**: Spring模拟topic消息中间件 - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-23 - **Last Updated**: 2026-03-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Middleware Lab 2 - WebSocket 消息中间件服务器 ## 项目简介 MiddlewareLab2Server 是一个基于 Spring Boot 的 WebSocket 消息中间件服务器,采用 STOMP 协议实现发布/订阅模式的消息传递系统。该项目支持主题(Topic)订阅、消息发布、异步消息处理等功能。 ## 技术栈 - **Spring Boot** - 应用框架 - **Spring WebSocket** - WebSocket 支持 - **Spring Messaging (STOMP)** - 消息传递协议 - **Java** - 开发语言 ## 核心功能 ### 1. 主题订阅与取消订阅 - 客户端可以订阅感兴趣的主题(Topic) - 支持取消订阅已订阅的主题 - 自动管理用户与主题的映射关系 ### 2. 消息发布 - 支持同步消息发布 - 支持异步消息发布(@Async) - 支持批量消息发布 ### 3. 用户管理 - 记录每个主题的订阅者数量 - 维护用户会话与订阅关系 - 连接断开时自动清理订阅信息 ### 4. REST API - `GET /api/topics` - 获取所有主题及订阅者数量 - `GET /api/topics/{topic}/subscribers` - 获取指定主题的订阅者数量 ## 项目结构 ``` src/main/java/com/middlewarelab2server/ ├── MiddlewareLab2ServerApplication.java # 启动类 ├── config/ │ └── WebSocketConfig.java # WebSocket 配置 ├── controller/ │ └── WebSocketController.java # 消息控制器 ├── interceptor/ │ └── WebSocketInterceptor.java # 消息通道拦截器 ├── listener/ │ └── WebSocketEventListener.java # WebSocket 事件监听 ├── model/ │ └── Message.java # 消息模型 └── service/ ├── MessagePublisher.java # 消息发布服务 └── TopicService.java # 主题管理服务 ``` ## 消息类型 `Message` 模型支持以下消息类型: - **SUBSCRIBE** - 订阅消息 - **UNSUBSCRIBE** - 取消订阅消息 - **PUBLISH** - 发布消息 - **SYSTEM** - 系统消息 ## 使用说明 ### 启动服务 ```bash ./mvnw spring-boot:run ``` 服务默认启动后,WebSocket 端点为 `/ws`,STOMP 端点为 `/topic`。 ### 客户端连接 客户端通过 STOMP 协议连接到 `/ws` 端点,然后可以: 1. **订阅主题** ```javascript stompClient.subscribe('/topic/{topicName}', callback) ``` 2. **发布消息** ```javascript stompClient.send('/app/publish', {}, JSON.stringify({ topic: 'topicName', content: 'message content' })) ``` 3. **取消订阅** ```javascript stompClient.send('/app/unsubscribe', {}, JSON.stringify({ topic: 'topicName' })) ``` ## 配置说明 在 `application.properties` 中可以配置服务器端口、WebSocket 相关参数等。 ## 依赖项 主要依赖包括: - spring-boot-starter-websocket - spring-boot-starter-messaging ## 测试 项目包含基础测试用例,可以运行: ```bash ./mvnw test ``` ## 许可证 本项目基于 LICENSE 文件中指定的许可证。