/// <summary>
        /// 检验是否启用限流规则
        /// </summary>
        /// <param name="path">请求地址</param>
        /// <returns></returns>
        private async Task <bool> CheckReRouteRuleAsync(string path)
        {
            var region      = CzarCacheRegion.ClientRoleModelRegion;
            var key         = path;
            var cacheResult = _ocelotCache.Get(key, region);

            if (cacheResult != null)
            {//提取缓存数据
                return(cacheResult.Role);
            }
            else
            {//重新获取限流策略
                var result = await _clientRateLimitRepository.CheckReRouteRuleAsync(path);

                _ocelotCache.Add(key, new ClientRoleModel()
                {
                    CacheTime = DateTime.Now, Role = result
                }, TimeSpan.FromSeconds(_options.CzarCacheTime), region);
                return(result);
            }
        }
示例#2
0
        public async Task UpdateClientRoleCache(string path)
        {
            var region = CzarCacheRegion.ClientRoleModelRegion;
            var key    = path;

            key = CzarOcelotHelper.GetKey(_options.RedisOcelotKeyPrefix, region, key);
            var result = await _clientRateLimitRepository.CheckReRouteRuleAsync(path);

            var data = new ClientRoleModel()
            {
                CacheTime = DateTime.Now, Role = result
            };

            if (_options.ClusterEnvironment)
            {
                RedisHelper.Set(key, data);              //加入redis缓存
                RedisHelper.Publish(key, data.ToJson()); //发布事件
            }
            else
            {
                _cache.Remove(key);
            }
        }