From ecfaff9c2acd62270adc8fed8e7c91041aab5602 Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 26 Jul 2023 10:34:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 140 ++++++++---------- doc/asyncSiteStructure.png | Bin 0 -> 23668 bytes doc/baseSiteStructure.png | Bin 0 -> 19340 bytes doc/function.png | Bin 0 -> 71193 bytes .../answerbi/manager/RedisLimiterManager.java | 1 - src/main/resources/application.yml | 18 +-- 6 files changed, 69 insertions(+), 90 deletions(-) create mode 100644 doc/asyncSiteStructure.png create mode 100644 doc/baseSiteStructure.png create mode 100644 doc/function.png diff --git a/README.md b/README.md index b813bb0..eb8bac8 100644 --- a/README.md +++ b/README.md @@ -2,57 +2,47 @@ ## 项目技术栈 -### 主流框架 & 特性 +### 后端 -- Spring Boot 2.7.x(贼新) -- Spring MVC -- MyBatis + MyBatis Plus 数据访问(开启分页) -- Spring Boot 调试工具和项目处理器 -- Spring AOP 切面编程 -- Spring Scheduler 定时任务 -- Spring 事务注解 - -### 数据存储 - -- MySQL 数据库 -- Redis 内存数据库 -- Elasticsearch 搜索引擎 -- 腾讯云 COS 对象存储 - -### 工具类 - -- Easy Excel 表格处理 -- Hutool 工具库 -- Gson 解析库 -- Apache Commons Lang3 工具类 -- Lombok 注解 - -### 业务特性 - -- Spring Session Redis 分布式登录 -- 全局请求响应拦截器(记录日志) -- 全局异常处理器 -- 自定义错误码 -- 封装通用响应类 +- SpringBoot +- MySQL +- Redis +- MyBatis + MyBatis Plus 数据访问框架 +- 消息队列(RabbitMQ) +- 限流(实现了分别基于Guava和Redisson的单机和分布式两种限流) +- AI能力 (Open AI接口 / **[鱼聪明AI SDK](https://www.yucongming.com/dev)** ) +- Easy Excel - Swagger + Knife4j 接口文档 -- 自定义权限注解 + 全局校验 -- 全局跨域处理 -- 长整数丢失精度解决 -- 多环境配置 +- Hutool 工具库 +### 前端 + +- React +- Umi + Ant Design Pro +- 可视化开发库 (Echarts) +- Umi openapi 代码生成 ## 业务功能 +用户(数据分析者)只需要导入最原始的数据集(excel文件),输入想要进行分析的目标(比如帮我分 +析一下网站的增长趋势),就能利用AI自动生成一个符合要求的图表以及结论。 -### 架构设计 +![智能分析](doc/function.png) + +保留了同步和异步两种方式 -- 合理分层 +- **同步**: 用户需要等待AI生成结果 +- **异步**: 上传后即时返回提示,告知用户“您的数据正在分析,请稍后在我的图表页面查看”,提升用户体验 +### 流程架构设计 -## 快速上手 +- 同步 + ![同步架构](doc/baseSiteStructure.png) +- 异步 + ![异步架构](doc/asyncSiteStructure.png) -> 所有需要修改的地方都标记了 `todo`,便于大家找到修改的位置~ - -### MySQL 数据库 +## 本地运行 +### [后端](https://gitee.com/anscoder/answerBi-backend) +#### MySQL 数据库 1)修改 `application.yml` 的数据库配置为你自己的: @@ -67,9 +57,7 @@ spring: 2)执行 `sql/create_table.sql` 中的数据库语句,自动创建库表 -3)启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档,不需要写前端就能在线调试接口了~ - -### Redis 分布式登录 +#### Redis 1)修改 `application.yml` 的 Redis 配置为你自己的: @@ -83,15 +71,7 @@ spring: password: 123456 ``` -2)修改 `application.yml` 中的 session 存储方式: - -```yml -spring: - session: - store-type: redis -``` - -3)移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数: +2)移除 `MainApplication` 类开头 `@SpringBootApplication` 注解内的 exclude 参数: 修改前: @@ -105,35 +85,41 @@ spring: ```java @SpringBootApplication ``` - -### Elasticsearch 搜索引擎 - -1)修改 `application.yml` 的 Elasticsearch 配置为你自己的: - +#### RabbitMq +1)修改 `application.yml` 的 RabbitMq 配置为你自己的 ```yml spring: - elasticsearch: - uris: http://localhost:9200 - username: root - password: 123456 + rabbitmq: + host: localhost + port: 5672 + username: guest + password: guest ``` -2)复制 `sql/post_es_mapping.json` 文件中的内容,通过调用 Elasticsearch 的接口或者 Kibana Dev Tools 来创建索引(相当于数据库建表) +配置完成启动项目,访问 `http://localhost:8101/api/doc.html` 即可打开接口文档 +### [前端](https://gitee.com/anscoder/answer-bi-frontend) +1)执行 npm install 或 yarn 安装依赖 +```shell + npm install ``` -PUT post_v1 -{ - 参数见 sql/post_es_mapping.json 文件 -} +或者 +```shell +yarn +``` +2)运行项目 +```shell +yarn run dev ``` -这步不会操作的话需要补充下 Elasticsearch 的知识,或者自行百度一下~ - -3)开启同步任务,将数据库的帖子同步到 Elasticsearch - -找到 job 目录下的 `FullSyncPostToEs` 和 `IncSyncPostToEs` 文件,取消掉 `@Component` 注解的注释,再次执行程序即可触发同步: - -```java -// todo 取消注释开启任务 -//@Component -``` \ No newline at end of file +## 后续计划 +- [x] 使用死信队列处理异常情况,将图表生成任务置为失败 +- [x] 引入Guava RateLimiter(单机) 和 Redisson RateLimiter(分布式) 两种限流机制 +- [x] 支持用户对失败的图表进行手动重试 +- [ ] 图表数据分表存储,提高查询灵活性和性能 +- [ ] 引入redis缓存提高加载速度 +- [ ] 给任务执行增加 guava Retrying重试机制,保证系统可靠性 +- [ ] 定时任务把失败状态的图表放到队列中(补偿机制) +- [ ] 给任务的执行增加超时时间,超时自动标记为失败(超时控制) +- [ ] 任务执行结果通过websocket实时通知给用户 +- [ ] 我的图表管理页增加一个刷新、定时刷新的按钮,保证获取到图表的最新状态(前端轮询) \ No newline at end of file diff --git a/doc/asyncSiteStructure.png b/doc/asyncSiteStructure.png new file mode 100644 index 0000000000000000000000000000000000000000..a043cd41f93ee08a3dd8f6b33b6e2ed955551ca8 GIT binary patch literal 23668 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 G%)bDYZ^|kF literal 0 HcmV?d00001 diff --git a/doc/baseSiteStructure.png b/doc/baseSiteStructure.png new file mode 100644 index 0000000000000000000000000000000000000000..97c8ea9cf5a6566305513869c13d2599a1b98850 GIT binary patch literal 19340 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 bhbTb|c>U=>bgXV+-hTW@Nh%*{;Qv1Wy<3;c literal 0 HcmV?d00001 diff --git a/doc/function.png b/doc/function.png new file mode 100644 index 0000000000000000000000000000000000000000..a69fb444672851b6d83f999b34d8334be80f0f56 GIT binary patch literal 71193 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 literal 0 HcmV?d00001 diff --git a/src/main/java/top/peng/answerbi/manager/RedisLimiterManager.java b/src/main/java/top/peng/answerbi/manager/RedisLimiterManager.java index 545d4c9..a5de7ab 100644 --- a/src/main/java/top/peng/answerbi/manager/RedisLimiterManager.java +++ b/src/main/java/top/peng/answerbi/manager/RedisLimiterManager.java @@ -12,7 +12,6 @@ import org.redisson.api.RateType; import org.redisson.api.RedissonClient; import org.springframework.stereotype.Service; import top.peng.answerbi.common.ErrorCode; -import top.peng.answerbi.config.RedissonConfig; import top.peng.answerbi.exception.ThrowUtils; /** diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e62173d..e960e52 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -15,7 +15,6 @@ spring: # 30 天过期 timeout: 2592000 # 数据库配置 - # todo 需替换配置 datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/my_db @@ -28,22 +27,17 @@ spring: port: 6379 timeout: 5000 password: 123456 - # Elasticsearch 配置 - # todo 需替换配置,然后取消注释 -# elasticsearch: -# uris: http://localhost:9200 -# username: root -# password: 123456 - # 文件上传 - servlet: - multipart: - # 大小限制 - max-file-size: 10MB + # rabbitMq 配置 rabbitmq: host: localhost port: 5672 username: guest password: guest + # 文件上传 + servlet: + multipart: + # 大小限制 + max-file-size: 10MB server: address: 0.0.0.0 port: 8101