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); } }); }
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(); }); }