public static HealthCheckBuilder AddRedisCheck(this HealthCheckBuilder builder, string name, TimeSpan cacheDuration, ConcurrentDictionary <string, ConnectionMultiplexer> connectionCache) { builder.AddCheck($"RedisCheck({name})", () => { try { var factory = new DefaultLoadBalancerFactory <ConnectionMultiplexer>(); var loadBalancer = factory.Resolve(() => { return(connectionCache.Values.ToList()); }); var connect = loadBalancer.Resolve(); var response = connect.GetStatus(); if (response != null && response.Any()) { return(HealthCheckResult.Healthy($"Healthy")); } return(HealthCheckResult.Unhealthy($"Unhealthy")); } catch (Exception ex) { return(HealthCheckResult.Unhealthy($"{ex.GetType().FullName}")); } }, cacheDuration); return(builder); }
private ILoadBalancer <ClientHelper> GetConnectionLoadBalancer(string nodeName) { var factory = new DefaultLoadBalancerFactory <ClientHelper>(); return(factory.Resolve(() => { var clients = new List <ClientHelper>(); for (int i = 0; i < this._NumberOfConnections; i++) { clients.Add(new ClientHelper(_DbNum, _clusterConfigOptions[nodeName], _KeyPrefix)); } return clients; })); }