ModelRequestRateLimit 模型请求限流中间件
()
| 165 | |
| 166 | // ModelRequestRateLimit 模型请求限流中间件 |
| 167 | func ModelRequestRateLimit() func(c *gin.Context) { |
| 168 | return func(c *gin.Context) { |
| 169 | // 在每个请求时检查是否启用限流 |
| 170 | if !setting.ModelRequestRateLimitEnabled { |
| 171 | c.Next() |
| 172 | return |
| 173 | } |
| 174 | |
| 175 | // 计算限流参数 |
| 176 | duration := int64(setting.ModelRequestRateLimitDurationMinutes * 60) |
| 177 | totalMaxCount := setting.ModelRequestRateLimitCount |
| 178 | successMaxCount := setting.ModelRequestRateLimitSuccessCount |
| 179 | |
| 180 | // 获取分组 |
| 181 | group := common.GetContextKeyString(c, constant.ContextKeyTokenGroup) |
| 182 | if group == "" { |
| 183 | group = common.GetContextKeyString(c, constant.ContextKeyUserGroup) |
| 184 | } |
| 185 | |
| 186 | //获取分组的限流配置 |
| 187 | groupTotalCount, groupSuccessCount, found := setting.GetGroupRateLimit(group) |
| 188 | if found { |
| 189 | totalMaxCount = groupTotalCount |
| 190 | successMaxCount = groupSuccessCount |
| 191 | } |
| 192 | |
| 193 | // 根据存储类型选择并执行限流处理器 |
| 194 | if common.RedisEnabled { |
| 195 | redisRateLimitHandler(duration, totalMaxCount, successMaxCount)(c) |
| 196 | } else { |
| 197 | memoryRateLimitHandler(duration, totalMaxCount, successMaxCount)(c) |
| 198 | } |
| 199 | } |
| 200 | } |
no test coverage detected