# cirno-chat-backend **Repository Path**: flanchanowo/cirno-chat-backend ## Basic Information - **Project Name**: cirno-chat-backend - **Description**: Cirno Chat 是一个现代化的聊天应用,致力于提供稳定、高效且智能的即时通信服务。该仓库为其后端部分,基于 Spring Cloud Alibaba 微服务架构实现,支持智能问答、离线消息推送、服务注册发现、负载均衡、统一网关鉴权等多项特性。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 2 - **Created**: 2025-05-16 - **Last Updated**: 2025-07-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Cirno Chat Backend Cirno Chat 是一个现代化的聊天应用,致力于提供稳定、高效且智能的即时通信服务。该仓库为其后端部分,基于 Spring Boot 单体架构实现,支持智能问答、离线消息推送、分布式websocket会话等多项特性。 目前项目正在开发中,仅供学习参考,不建议直接用于到生产环境中 ## 📱 前端项目地址 https://gitee.com/flanchanowo/cirno-chat-mobile-frontend ## ☁️ 后端架构概览 - **Spring Boot**:服务开发基础框架。 - **MyBatis Plus**:ORM 框架,用于数据持久化。 - **Spring AI**:用于智能聊天问答和聊天建议功能。 - **RabbitMQ**:消息队列服务,支持异步消息处理。分布式websocket会话连接。 - **Redis**:缓存服务,支持分布式锁、会话管理等。 - **Object Storage**:对象存储服务,支持文件上传与分发。 - **Knife4j**:Swagger 增强工具,用于生成并展示在线 API 文档。 - **Redission**:用于保障并发操作一致性,防止重复事件触发(如重复消息推送)。 ## 📦 项目结构 ``` cirno-chat-backend/ ├── cirno-chat-server/ # 核心服务 ├── sql/ # 数据库相关 SQL 脚本 ├── nginx.conf # Nginx 配置 ├── docker-compose.yaml # Docker Compose 多服务编排 ├── build-image.sh # 构建 Docker 镜像脚本 ├── Dockerfile # 服务构建 Dockerfile ├── pom.xml # Maven 父工程配置 └── readme.md # 项目说明文档 ``` ## 🧠 智能聊天能力 本项目集成 [Spring AI](https://docs.spring.io/spring-ai/) 实现智能聊天建议和问答支持,可通过配置接入多种大语言模型(如 OpenAI、DeepSeek 等),为用户提供个性化建议与语义理解能力。 ## 📡 消息系统 - 使用 **RabbitMQ** 作为核心消息队列; - 利用 **Redis** 实现离线消息暂存; - 支持异步推送、消息重试、延迟处理等机制; - 支持多端登录和会话同步。 ### 消息推送流程: - **在线用户**:实时投递; - **离线用户**:缓存至 Redis,用户上线后自动补发; - **重复订阅防护**:通过 Redis 分布式锁控制频道订阅行为,防止同一消息被重复推送给同一用户; - **高并发处理**:消息发送与接收均异步执行,提升系统吞吐能力。 ## 🔐 分布式锁机制 在用户订阅消息频道、注册群聊事件监听器时,项目通过 Redis 实现分布式锁,用于防止以下情况: - 重复注册监听器; - 重复触发推送逻辑; - 并发下导致的消息重复推送。 分布式锁策略示例: - 加锁键:`lock:channel:{userId}:{channelId}` - 加锁时间:短时有效(一般 < 10s) - 避免阻塞:使用非阻塞 try-lock 模式 ## 📚 接口文档与调试支持 本项目各个子模块内嵌了 Swagger + Knife4j 在线 API 文档系统,开发阶段可访问:\ 支持将文档导出为: - **Apifox** 格式,用于调试与自动化测试; - **Postman** 格式,便于团队协作与环境配置。 ### 如何导出接口文档: 1. 打开 `doc.html` 2. 点击右上角的「导出 Swagger」或「复制接口 JSON」 3. 进入 Apifox 或 Postman,导入 Swagger JSON 文件 ## 🚀 快速开始 ### 前置条件 - Docker & Docker Compose - JDK 21+ - Maven 3.8+ - MySQL 8+ - 邮箱服务码(如 QQ 邮箱)用于登陆和注册验证 (如需邮箱验证功能) - RabbitMQ - Redis - COS对象储存 - COS智能体服务(如需智能问答功能) ### 启动项目 ```bash # 启动所有服务(推荐) docker-compose up --build ```