feat: 添加流控

This commit is contained in:
2026-01-26 23:12:53 +08:00
parent 45f8348395
commit a34168ef75
6 changed files with 40 additions and 6 deletions

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CoolRequestCommonStatePersistent"> <component name="CoolRequestCommonStatePersistent">
<option name="searchCache" value="/api/v1/auth/refresh" /> <option name="searchCache" value="difficul" />
</component> </component>
</project> </project>

20
.idea/dataSources.xml generated
View File

@@ -81,5 +81,25 @@
<jdbc-url>jdbc:mysql://10.0.0.10/aioj_dev</jdbc-url> <jdbc-url>jdbc:mysql://10.0.0.10/aioj_dev</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir> <working-dir>$ProjectFileDir$</working-dir>
</data-source> </data-source>
<data-source source="LOCAL" name="aioj" uuid="cfc60cc1-f725-4d9c-b129-5b722771d69e">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://10.0.0.10:3306</jdbc-url>
<jdbc-additional-properties>
<property name="com.intellij.clouds.kubernetes.db.host.port" />
<property name="com.intellij.clouds.kubernetes.db.enabled" value="false" />
<property name="com.intellij.clouds.kubernetes.db.container.port" />
</jdbc-additional-properties>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
<data-source source="LOCAL" name="jdbc:mysql://10.0.0.10/aioj_dev [DEBUG]" group="QuestionServiceApplication" uuid="5a11088e-1728-4471-a8db-deaeac511136">
<driver-ref>mysql.8</driver-ref>
<synchronize>true</synchronize>
<imported>true</imported>
<jdbc-driver>com.mysql.cj.jdbc.Driver</jdbc-driver>
<jdbc-url>jdbc:mysql://10.0.0.10/aioj_dev</jdbc-url>
<working-dir>$ProjectFileDir$</working-dir>
</data-source>
</component> </component>
</project> </project>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="db-tree-configuration"> <component name="db-tree-configuration">
<option name="data" value="1:0:AIOJAdminApplication&#10;5:0:UserServiceApplication&#10;9:0:AIOJAuthApplication&#10;13:0:FileServiceApplication&#10;----------------------------------------&#10;2:1:43cc61de-66e1-44cc-b4a2-b24d7e03b490&#10;3:1:1323cc2e-0b2e-40de-abe6-d1f4c7567b1e&#10;4:1:3a647305-fb45-441b-ba2b-a79ec82a3778&#10;6:5:903d03c4-df11-4cf8-939a-3e5fba0ab207&#10;7:5:c52f5e64-993d-4013-9e2b-838e23d604a2&#10;8:5:38b7e47b-6235-4576-8b43-df28c967dbcc&#10;10:9:2fd8684a-b9aa-4507-abb0-f7c259d91286&#10;11:9:e757fbaf-3605-4bf2-9eb5-852d06273adc&#10;12:9:38fda843-f467-435e-99e4-2a771f7af3f3&#10;14:13:8d957a30-3743-40eb-a916-c6503a783fb9&#10;" /> <option name="data" value="1:0:AIOJAdminApplication&#10;5:0:UserServiceApplication&#10;9:0:AIOJAuthApplication&#10;13:0:FileServiceApplication&#10;15:0:QuestionServiceApplication&#10;----------------------------------------&#10;2:1:43cc61de-66e1-44cc-b4a2-b24d7e03b490&#10;3:1:1323cc2e-0b2e-40de-abe6-d1f4c7567b1e&#10;4:1:3a647305-fb45-441b-ba2b-a79ec82a3778&#10;6:5:903d03c4-df11-4cf8-939a-3e5fba0ab207&#10;7:5:c52f5e64-993d-4013-9e2b-838e23d604a2&#10;8:5:38b7e47b-6235-4576-8b43-df28c967dbcc&#10;10:9:2fd8684a-b9aa-4507-abb0-f7c259d91286&#10;11:9:e757fbaf-3605-4bf2-9eb5-852d06273adc&#10;12:9:38fda843-f467-435e-99e4-2a771f7af3f3&#10;14:13:8d957a30-3743-40eb-a916-c6503a783fb9&#10;16:15:5a11088e-1728-4471-a8db-deaeac511136&#10;17:0:cfc60cc1-f725-4d9c-b129-5b722771d69e&#10;" />
</component> </component>
</project> </project>

10
.idea/easyCodeTableSettingEncode.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="EasyCodeTableSetting">
<option name="tableInfoMap">
<map>
<entry key="aioj_dev.attachment" value="eyJuYW1lIjoiQXR0YWNobWVudCIsInByZU5hbWUiOiIiLCJjb21tZW50Ijoi6YCa55So6ZmE5Lu26KGoIiwidGVtcGxhdGVHcm91cE5hbWUiOiIiLCJmdWxsQ29sdW1uIjpbeyJuYW1lIjoiaWQiLCJjb21tZW50Ijoi5Li76ZSuIiwidHlwZSI6ImphdmEubGFuZy5Mb25nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJmaWxlTmFtZSIsImNvbW1lbnQiOiLljp/lp4vmlofku7blkI0iLCJ0eXBlIjoiamF2YS5sYW5nLlN0cmluZyIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoiZmlsZUV4dGVuc2lvbiIsImNvbW1lbnQiOiLmlofku7blkI7nvIDlkI0iLCJ0eXBlIjoiamF2YS5sYW5nLlN0cmluZyIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoiZmlsZVNpemUiLCJjb21tZW50Ijoi5paH5Lu25aSn5bCPKEJ5dGUpIiwidHlwZSI6ImphdmEubGFuZy5Mb25nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJmaWxlSGFzaCIsImNvbW1lbnQiOiLmlofku7blk4jluIwoTUQ1L1NIQTI1NinnlKjkuo7ljrvph40iLCJ0eXBlIjoiamF2YS5sYW5nLlN0cmluZyIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoibWltZVR5cGUiLCJjb21tZW50IjoiTUlNReexu+WeiyIsInR5cGUiOiJqYXZhLmxhbmcuU3RyaW5nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJzdG9yYWdlVHlwZSIsImNvbW1lbnQiOiLlrZjlgqjmlrnmoYg6IExPQ0FMLCBPU1MsIFMzLCBNSU5JTyIsInR5cGUiOiJqYXZhLmxhbmcuU3RyaW5nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJzdG9yYWdlUGF0aCIsImNvbW1lbnQiOiLniannkIblrZjlgqjot6/lvoTmiJblr7nosaHlrZjlgqhLZXkiLCJ0eXBlIjoiamF2YS5sYW5nLlN0cmluZyIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoiYnVzaW5lc3NUeXBlIiwiY29tbWVudCI6IuaJgOWxnuS4muWKoeaooeWdlyIsInR5cGUiOiJqYXZhLmxhbmcuU3RyaW5nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJidXNpbmVzc0lkIiwiY29tbWVudCI6IuaJgOWxnuS4muWKoWlkIiwidHlwZSI6ImphdmEubGFuZy5Mb25nIiwiY3VzdG9tIjpmYWxzZSwiZXh0Ijoie30ifSx7Im5hbWUiOiJ1c2VySWQiLCJjb21tZW50Ijoi5LiK5Lyg6ICFSUQiLCJ0eXBlIjoiamF2YS5sYW5nLkxvbmciLCJjdXN0b20iOmZhbHNlLCJleHQiOiJ7fSJ9LHsibmFtZSI6ImltYWdlSW5mbyIsImNvbW1lbnQiOiLlm77niYflrr3pq5jjgIFFWElG562J5YWD5pWw5o2uIiwidHlwZSI6ImphdmEubGFuZy5TdHJpbmciLCJjdXN0b20iOmZhbHNlLCJleHQiOiJ7fSJ9LHsibmFtZSI6ImlzRGVsZXRlZCIsImNvbW1lbnQiOiLpgLvovpHliKDpmaQoMC3mraPluLgsIDEt5bey5Yig6ZmkKSIsInR5cGUiOiJqYXZhLmxhbmcuSW50ZWdlciIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoiY3JlYXRlZEF0IiwiY29tbWVudCI6IuWIm+W7uuaXtumXtCIsInR5cGUiOiJqYXZhLnV0aWwuRGF0ZSIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In0seyJuYW1lIjoidXBkYXRlZEF0IiwiY29tbWVudCI6IuabtOaWsOaXtumXtCIsInR5cGUiOiJqYXZhLnV0aWwuRGF0ZSIsImN1c3RvbSI6ZmFsc2UsImV4dCI6Int9In1dLCJzYXZlUGFja2FnZU5hbWUiOiIiLCJzYXZlUGF0aCI6IiIsInNhdmVNb2RlbE5hbWUiOiIifQ==" />
</map>
</option>
</component>
</project>

View File

@@ -68,8 +68,8 @@
<option name="tableUIInfoList"> <option name="tableUIInfoList">
<list> <list>
<TableUIInfo> <TableUIInfo>
<option name="className" value="QuestionSubmit" /> <option name="className" value="Question" />
<option name="tableName" value="question_submit" /> <option name="tableName" value="question" />
</TableUIInfo> </TableUIInfo>
</list> </list>
</option> </option>

View File

@@ -1,5 +1,6 @@
package cn.meowrain.aioj.backend.question.controller; package cn.meowrain.aioj.backend.question.controller;
import cn.meowrain.aioj.backend.framework.core.errorcode.ErrorCode;
import cn.meowrain.aioj.backend.framework.core.web.Result; import cn.meowrain.aioj.backend.framework.core.web.Result;
import cn.meowrain.aioj.backend.framework.core.web.Results; import cn.meowrain.aioj.backend.framework.core.web.Results;
import cn.meowrain.aioj.backend.question.dao.entity.QuestionSubmit; import cn.meowrain.aioj.backend.question.dao.entity.QuestionSubmit;
@@ -42,9 +43,12 @@ public class QuestionSubmitController {
return Results.success(submitId); return Results.success(submitId);
} }
public String handleException(BlockException ex) { public Result<Void> handleException(QuestionSubmitRequestDTO request, BlockException ex) {
System.out.println("被限流了: " + ex.getClass().getCanonicalName()); System.out.println("被限流了: " + ex.getClass().getCanonicalName());
return "系统繁忙,请稍后再试!(这是自定义的限流提示)";
// 假设你的 Results 工具类支持返回错误信息
// 这里的 code (比如 429) 和 message 根据你的 Result 结构来定
return Results.failure(ErrorCode.API_REQUEST_ERROR.code(),"系统繁忙,请稍后再试!(这是自定义的限流提示)");
} }
/** /**