Ejemplo n.º 1
0
 public StackExchangeRedisClient(RedisCacheOption redisCacheOption, IRedisBinarySerializer serializer)
 {
     EnsureUtil.NotNull(redisCacheOption, "RedisCacheOptions");
     EnsureUtil.NotNull(serializer, "IBinarySerializer");
     _redisCacheOption      = redisCacheOption;
     _serializer            = serializer;
     _connectionMultiplexer = ConnectionMultiplexerFactory.GetConnection(_redisCacheOption.ConnectionString);
 }
Ejemplo n.º 2
0
        /// <summary>
        /// Add and configure any of the middleware
        /// </summary>
        /// <param name="services">Collection of service descriptors</param>
        /// <param name="configuration">Configuration root of the application</param>
        public void ConfigureServices(IServiceCollection services, IConfiguration configuration, ITypeFinder typeFinder)
        {
            var isOpen = configuration.GetValue <bool>("EnableAspNetCoreRateLimit", false);

            if (isOpen)
            {
                //需要存储速率和ip规则
                services.AddMemoryCache();
                //加载appsettings.json中的配置项 ,下面三项是加载general,rules
                services.Configure <IpRateLimitOptions>(configuration.GetSection("IpRateLimiting"));
                services.Configure <IpRateLimitPolicies>(configuration.GetSection("IpRateLimitPolicies"));

                //load general configuration from appsettings.json
                services.Configure <ClientRateLimitOptions>(configuration.GetSection("ClientRateLimiting"));
                //load client rules from appsettings.json
                services.Configure <ClientRateLimitPolicies>(configuration.GetSection("ClientRateLimitPolicies"));

                services.AddStackExchangeRedisCache(options =>
                {
                    //options.ConfigurationOptions = new ConfigurationOptions
                    //{
                    //    //silently retry in the background if the Redis connection is temporarily down
                    //    AbortOnConnectFail = false
                    //};
                    RedisCacheOption redisOptions = new RedisCacheOption(configuration);
                    var configurationOptions      = new ConfigurationOptions
                    {
                        ConnectTimeout = redisOptions.ConnectionTimeout,
                        Password       = redisOptions.Password,
                        Ssl            = redisOptions.IsSsl,
                        SslHost        = redisOptions.SslHost,
                    };
                    foreach (var endpoint in redisOptions.Endpoints)
                    {
                        configurationOptions.EndPoints.Add(endpoint.Host, endpoint.Port);
                    }
                    options.ConfigurationOptions = configurationOptions;
                    options.InstanceName         = "NetPro.AspNetRateLimit";
                });
                // inject counter and rules stores
                //services.AddSingleton<IClientPolicyStore, MemoryCacheClientPolicyStore>();
                services.AddSingleton <IClientPolicyStore, DistributedCacheClientPolicyStore>();
                //注入计时器和规则
                //services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
                //services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
                services.AddSingleton <IIpPolicyStore, DistributedCacheIpPolicyStore>();
                services.AddSingleton <IRateLimitCounterStore, DistributedCacheRateLimitCounterStore>();
                services.AddSingleton <IRateLimitConfiguration, RateLimitConfiguration>();
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="next"></param>
 /// <param name="iLogger"></param>
 /// <param name="requestAnalysisOption"></param>
 /// <param name="memorycache"></param>
 /// <param name="redisManager"></param>
 /// <param name="redisCacheOption"></param>
 /// <param name="httpContextAccessor"></param>
 public RequestAnalysisMiddleware(RequestDelegate next,
                                  ILogger <RequestAnalysisMiddleware> iLogger,
                                  RequestAnalysisOption requestAnalysisOption,
                                  IMemoryCache memorycache,
                                  IRedisManager redisManager,
                                  RedisCacheOption redisCacheOption,
                                  IHttpContextAccessor httpContextAccessor)
 {
     _next    = next;
     _iLogger = iLogger;
     _requestAnalysisOption = requestAnalysisOption;
     _memorycache           = memorycache;
     _redisManager          = redisManager;
     _redisCacheOption      = redisCacheOption;
     _httpContextAccessor   = httpContextAccessor;
 }
Ejemplo n.º 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="next"></param>
        /// <param name="iLogger"></param>
        /// <param name="requestAnalysisOption"></param>
        /// <param name="memorycache"></param>
        /// <param name="redisManager"></param>
        /// <param name="redisCacheOption"></param>
        /// <param name="httpContextAccessor"></param>
        public RequestAnalysisMiddleware(RequestDelegate next,
                                         ILogger <RequestAnalysisMiddleware> iLogger,
                                         RequestAnalysisOption requestAnalysisOption,
                                         IMemoryCache memorycache,
#pragma warning disable CS0618 // Type or member is obsolete
                                         IRedisManager redisManager,
#pragma warning restore CS0618 // Type or member is obsolete
                                         RedisCacheOption redisCacheOption,
                                         IHttpContextAccessor httpContextAccessor)
        {
            _next    = next;
            _iLogger = iLogger;
            _requestAnalysisOption = requestAnalysisOption;
            _memorycache           = memorycache;
            _redisManager          = redisManager;
            _redisCacheOption      = redisCacheOption;
            _httpContextAccessor   = httpContextAccessor;
        }
Ejemplo n.º 5
0
        static void Main(string[] args)
        {
            var host = new HostBuilder()
                       .ConfigureHostConfiguration(configHost =>
            {
                configHost.SetBasePath(Directory.GetCurrentDirectory());
                configHost.AddEnvironmentVariables("ASPNETCORE_");
            })
                       .ConfigureAppConfiguration((hostContext, configApp) =>
            {
                configApp.AddJsonFile("appsettings.json", true);
                configApp.AddJsonFile($"appsettings.{hostContext.HostingEnvironment.EnvironmentName}.json", true);
                configApp.AddEnvironmentVariables();
            })
                       .ConfigureServices((hostContext, services) =>
            {
                var option = new RedisCacheOption();
                var tt     = hostContext.Configuration.GetSection("Redis").Get <RedisCacheOption>();
                hostContext.Configuration.Bind("Redis", option);
            })
                       .Build();

            host.Run();
        }
Ejemplo n.º 6
0
 /// <summary>
 /// 创建redis客户端
 /// </summary>
 /// <param name="redisCacheOption">redis配置信息</param>
 /// <param name="serializer">序列化类</param>
 /// <returns></returns>
 public IRedisClient CreateClient(RedisCacheOption redisCacheOption, IRedisBinarySerializer serializer)
 {
     return(new StackExchangeRedisClient(redisCacheOption, serializer));
 }
Ejemplo n.º 7
0
 /// <summary>
 /// 创建redis客户端
 /// </summary>
 /// <param name="redisCacheOption">redis配置信息</param>
 /// <returns></returns>
 public IRedisClient CreateClient(RedisCacheOption redisCacheOption)
 {
     return(new StackExchangeRedisClient(redisCacheOption, new RedisJsonBinarySerializer()));
 }