private RateLimitProcessor <SimulationRequest> GetTokenBucketProcessor(string storageType) { var tokenBucketRules = new TokenBucketRateLimitRule <SimulationRequest>[] { new TokenBucketRateLimitRule <SimulationRequest>(30, 10, TimeSpan.FromSeconds(1)) { Id = Guid.NewGuid().ToString(), LockSeconds = 1, ExtractTarget = (request) => { return(request.RequestResource); }, CheckRuleMatching = (request) => { return(true); }, } }; IRateLimitStorage storage = new InProcessMemoryStorage(); if (storageType == "redis") { storage = new RedisStorage(StackExchange.Redis.ConnectionMultiplexer.Connect("127.0.0.1")); } return(new RateLimitProcessor <SimulationRequest> .Builder() .WithAlgorithm(new TokenBucketAlgorithm <SimulationRequest>(tokenBucketRules)) .WithStorage(storage) .WithError(new RateLimitError() { Code = 429, }) .Build()); }
private RateLimitProcessor <SimulationRequest> GetTokenBucketProcessor(string storageType, int limitNumber) { IRateLimitStorage storage = memoryStorage; if (storageType == "redis") { storage = redisStorage; } var tokenBucketRules = new TokenBucketRateLimitRule <SimulationRequest>[] { new TokenBucketRateLimitRule <SimulationRequest>(limitNumber, 100, TimeSpan.FromSeconds(1)) { Id = Guid.NewGuid().ToString(), LockSeconds = 1, ExtractTarget = (request) => { return(request.RequestResource); }, CheckRuleMatching = (request) => { return(true); }, } }; return(new RateLimitProcessor <SimulationRequest> .Builder() .WithAlgorithm(new TokenBucketAlgorithm <SimulationRequest>(tokenBucketRules)) .WithStorage(storage) .WithError(new RateLimitError() { Code = 429, }) .Build()); }