Exemple #1
0
        private void HeartBeatDirectories()
        {
            _heartbeatSocket = new RouterSocket(DirectoryHeartbeatEnpoint);

            while (!_cancel.IsCancellationRequested)
            {
                foreach (var producer in _stateOfTheWorld)
                {
                    using (var heartbeatQuery = new RequestSocket(producer.Value.HeartbeatEndpoint))
                    {
                        var heartbeatQueryMessage = new HeartbeatQuery()
                        {
                            HeartbeatEndpoint = DirectoryHeartbeatEnpoint
                        };

                        var msg = Encoding.UTF32.GetBytes(JsonConvert.SerializeObject(heartbeatQueryMessage));

                        heartbeatQuery.SendFrame(msg);

                        Thread.Sleep(HeartbeatDelay);

                        var heartbeatMessage = new NetMQMessage();

                        if (_heartbeatSocket.TryReceiveMultipartMessage(ref heartbeatMessage))
                        {
                            producer.Value.State = ProducerState.Alive;
                        }
                        else
                        {
                            producer.Value.State = ProducerState.NotResponding;
                        }
                    }
                }
            }
        }
        public bool HandleHeartbeat()
        {
            var failures = 0;

            _heartbeatSocket = new RouterSocket(_consumerConfiguration.HeartbeatEndpoint);

            while (!_cancel.IsCancellationRequested || failures > HeartbeatFailureTolerance)
            {
                using (var heartbeatQuery = new RequestSocket(_currentProducer.HeartbeatEndpoint))
                {
                    var heartbeat = new HeartbeatQuery()
                    {
                        HeartbeatEndpoint = _consumerConfiguration.HeartbeatEndpoint
                    };

                    var msg = Encoding.UTF32.GetBytes(JsonConvert.SerializeObject(heartbeat, _settings));

                    heartbeatQuery.SendFrame(msg);

                    Thread.Sleep(HeartbeatDelay);

                    var heartbeatMessage = new NetMQMessage();

                    if (_heartbeatSocket.TryReceiveMultipartMessage(ref heartbeatMessage))
                    {
                        _lastHearbeat = JsonConvert.DeserializeObject <HeartbeatResponse>(Encoding.UTF32.GetString(heartbeatMessage[2].Buffer), _settings);
                        failures      = 0;
                    }
                    else
                    {
                        failures++;
                    }

                    if (failures > HeartbeatFailureTolerance)
                    {
                        break;
                    }
                }
            }

            return(failures < HeartbeatFailureTolerance);
        }