feat: 配置列表分页与钉钉机器人分钟级排队限流
统一 sources/templates/channels/rules 列表为分页响应,避免配置增多时全量返回;按钉钉 access_token 限制每分钟发送并在超限时等待下一分钟,降低触发官方封禁风险。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+11
-1
@@ -105,9 +105,19 @@ func main() {
|
||||
matcher := engine.NewMatcher(st, redisCache)
|
||||
renderer := engine.NewRenderer()
|
||||
|
||||
// DingTalk per-robot rate limit (queue/wait when over 18/min by default)
|
||||
var dingtalkLimiter *adapter.DingTalkLimiter
|
||||
limitPerMin := cfg.RateLimit.DingTalkPerMin
|
||||
if redisCache != nil {
|
||||
dingtalkLimiter = adapter.NewDingTalkLimiter(redisCache, limitPerMin)
|
||||
} else {
|
||||
dingtalkLimiter = adapter.NewMemoryDingTalkLimiter(limitPerMin)
|
||||
slog.Warn("dingtalk rate limit using in-memory store (single instance only)")
|
||||
}
|
||||
|
||||
// Build sender factory
|
||||
senderFactory := func(channelType string) (adapter.ChannelSender, error) {
|
||||
return adapter.NewSender(channelType, &cfg.SMTP)
|
||||
return adapter.NewSender(channelType, &cfg.SMTP, dingtalkLimiter)
|
||||
}
|
||||
router := engine.NewRouter(st, redisCache, senderFactory)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user