public void TestDynamicInstanceRegister()
        {
            InstanceRepository     repository = new InstanceRepository(Constants.RegistryClientConfig);
            CustomInstanceRegistry registry   = new CustomInstanceRegistry(repository, Constants.RegistryClientConfig);

            Instance[] instances = new Instance[] { Constants.NewInstance(), Constants.NewInstance() };
            repository.Update(instances, RegisterType.register);
            HashSet <Instance> instancesSet = new HashSet <Instance>();

            while (registry.FailedInstances.Count == 0)
            {
                Threads.Sleep(10);
            }
            registry.FailedInstances.ForEach(failedInstance =>
            {
                instancesSet.Add(failedInstance.Instance);
            });
            Assert.AreEqual(instancesSet.Count, instances.Length);
            foreach (Instance instance in instances)
            {
                Assert.IsTrue(instancesSet.Contains(instance));
            }
            while (registry.AcceptHeartbeats < 1 || registry.SendHeartbeats < 1)
            {
                Threads.Sleep(500);
            }
        }
Example #2
0
        public RegistryClientImpl(string clientId, ArtemisClientManagerConfig managerConfig)
        {
            Preconditions.CheckArgument(!string.IsNullOrWhiteSpace(clientId), "clientId");
            Preconditions.CheckArgument(managerConfig != null, "manager config");
            ArtemisClientConfig clientConfig = new ArtemisClientConfig(clientId, managerConfig,
                                                                       AddressManager.NewRegistryAddressManager(clientId, managerConfig));

            this._instanceRepository = new InstanceRepository(clientConfig);
            this._instanceRegistry   = new InstanceRegistry(_instanceRepository, clientConfig);
        }
        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();
            });
        }
 public CustomInstanceRegistry(InstanceRepository instanceRepository, ArtemisClientConfig config)
     : base(instanceRepository, config)
 {
 }