Beispiel #1
0
        public LoadBalancer(
            IDiscovery discovery,
            DeploymentIdentifier deploymentIdentifier,
            ReachabilityCheck reachabilityCheck,
            TrafficRoutingStrategy trafficRoutingStrategy,
            Func <Node, DeploymentIdentifier, ReachabilityCheck, Action, NodeMonitoringState> createNodeMonitoringState,
            Func <string, AggregatingHealthStatus> getAggregatingHealthStatus,
            Func <DiscoveryConfig> getConfig,
            IDateTime dateTime,
            ILog log,
            IEnvironment environment
            )
        {
            DeploymentIdentifier      = deploymentIdentifier;
            Discovery                 = discovery;
            ReachabilityCheck         = reachabilityCheck;
            TrafficRoutingStrategy    = trafficRoutingStrategy;
            CreateNodeMonitoringState = createNodeMonitoringState;
            GetConfig                 = getConfig;
            DateTime       = dateTime;
            _lastUsageTime = DateTime.UtcNow;
            Log            = log;
            var    aggregatingHealthStatus = getAggregatingHealthStatus(deploymentIdentifier.ServiceName);
            string healthCheckEntryName    = (deploymentIdentifier.DeploymentEnvironment ?? "prod") + deploymentIdentifier.Zone == environment.Zone ? "" : $" ({deploymentIdentifier.Zone})";

            _healthCheck = aggregatingHealthStatus.Register(healthCheckEntryName, CheckHealth);
        }
Beispiel #2
0
        private void CreateLoadBalancer(TrafficRoutingStrategy trafficRoutingStrategy = TrafficRoutingStrategy.RandomByRequestID)
        {
            var createLoadBalancer = _kernel.Get <Func <DeploymentIdentifier, ReachabilityCheck, TrafficRoutingStrategy, ILoadBalancer> >();

            _loadBalancer = createLoadBalancer(
                new DeploymentIdentifier(ServiceName, Env, _environment),
                (n, c) => _reachabilityCheck(n, c),
                trafficRoutingStrategy);
        }
Beispiel #3
0
 public LoadBalancer(
     IDiscovery discovery,
     DeploymentIdentifier deploymentIdentifier,
     ReachabilityCheck reachabilityCheck,
     TrafficRoutingStrategy trafficRoutingStrategy,
     Func <Node, DeploymentIdentifier, ReachabilityCheck, Action, NodeMonitoringState> createNodeMonitoringState,
     IHealthMonitor healthMonitor,
     IDateTime dateTime,
     ILog log)
 {
     DeploymentIdentifier      = deploymentIdentifier;
     Discovery                 = discovery;
     ReachabilityCheck         = reachabilityCheck;
     TrafficRoutingStrategy    = trafficRoutingStrategy;
     CreateNodeMonitoringState = createNodeMonitoringState;
     DateTime       = dateTime;
     Log            = log;
     _healthMonitor = healthMonitor.SetHealthFunction(DeploymentIdentifier.ToString(), () => new ValueTask <HealthCheckResult>(_healthStatus));
 }
 public ILoadBalancer CreateLoadBalancer(DeploymentIdentifier deploymentIdentifier, ReachabilityCheck reachabilityCheck, TrafficRoutingStrategy trafficRoutingStrategy)
 {
     return(_createLoadBalancer(deploymentIdentifier, new LocalNodeSource(), reachabilityCheck, trafficRoutingStrategy));
 }