Exemplo n.º 1
0
        public ServiceDiscovery(ServiceRepository serviceRepository, ArtemisClientConfig config)
        {
            Preconditions.CheckArgument(serviceRepository != null, "ServiceRepository should not be null");
            _serviceRepository   = serviceRepository;
            _discoveryHttpClient = new ArtemisDiscoveryHttpClient(config);
            _ttl = config.ConfigurationManager.GetProperty(config.Key("service-discovery.ttl"), 15 * 60 * 1000L, 60 * 1000, 24 * 60 * 60 * 1000);

            _sessionContext = new WebSocketSessionContext(config, webSocket =>
            {
                try
                {
                    SubScribe(webSocket);
                }
                catch (Exception e)
                {
                    _log.Warn("subscibe service change message failed", e);
                }
            }, (webSocket, message) =>
            {
                try
                {
                    OnInstanceChange(message.Data.FromJson <InstanceChange>());
                }
                catch (Exception e)
                {
                    _log.Warn("convert message failed", e);
                }
            });

            var key = config.Key("service-discovery.dynamic-scheduled-thread.run-interval");

            _poller = new DynamicTimer(config.ConfigurationManager.GetProperty(key, 60 * 1000, 60 * 1000, 24 * 60 * 60 * 1000),
                                       () =>
            {
                try
                {
                    Reload(ReloadDiscoveryConfigs);
                }
                catch (Exception e)
                {
                    _log.Warn("reload services failed", e);
                }
            });
        }
Exemplo n.º 2
0
        public InstanceRegistry(InstanceRepository instanceRepository, ArtemisClientConfig config)
        {
            Preconditions.CheckArgument(instanceRepository != null, "instance repository");
            Preconditions.CheckArgument(config != null, "config");
            _instanceRepository = instanceRepository;
            _ttl      = config.ConfigurationManager.GetProperty(config.Key("instance-registry.instance-ttl"), 20 * 1000, 5 * 1000, 24 * 60 * 60 * 1000);
            _interval = config.ConfigurationManager.GetProperty(config.Key("instance-registry.heartbeat-interval"), 5 * 1000, 500, 5 * 60 * 1000);

            Action <WebSocket> onOpen = (webSocket) => {
            };
            Action <WebSocket, MessageEventArgs> onMessage = (webSocket, message) =>
            {
                AcceptHeartbeat(message);
            };

            _sessionContext = new WebSocketSessionContext(config, onOpen, onMessage);

            var heartbeatStatusMetricConfig = new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.event.distribution") }
            });

            _heartbeatStatus         = config.EventMetricManager.GetMetric(config.Key("heartbeat.event"), heartbeatStatusMetricConfig);
            _prepareHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.prepare-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.prepare-latency.distribution") }
            }));
            _sendHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.send-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.send-latency.distribution") }
            }));
            _acceptHeartbeatLatency = config.AuditMetricManager.GetMetric(config.Key("heartbeat.accept-latency"), new MetricConfig(new Dictionary <string, string>()
            {
                { "metric_name_distribution", config.Key("heartbeat.accept-latency.distribution") }
            }));

            _heartbeater = new DynamicTimer(config.ConfigurationManager.GetProperty(config.Key("instances-registry.heartbeat-interval.dynamic-scheduled-thread.run-interval"), 1000, 500, 90 * 1000),
                                            () =>
            {
                CheckHeartbeat();
            });
        }