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