/// <summary> /// Helper event handler. /// </summary> private void ReceiveReady(object sender, NetMQSocketEventArgs e) { try { // Receiving client message. var clientRequest = e.Socket.ReceiveMultipartMessage(); // Parsing client message. var clientAddress = clientRequest[0]; var clientRequestData = MessageQueueCommonItems.DeserializeFromJson <TRequest>(clientRequest[2].ConvertToString()); // Calling handler. OnRequestReady?.Invoke(new ZmqRequestMessage <TRequest, TResponse>(clientAddress, e.Socket, clientRequestData, ref logger)); } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveRequestMessage, message: ErrorMessages.FailedToReceiveRequestMessage, innerException: ex, queueContext: CommonItems.ZeroMqName, address: zmqConfiguration.Address, logger: logger); } }
/// <summary> /// Helper event handler. /// </summary> private void ResponseReady(object sender, NetMQSocketEventArgs e) { try { // Receiving message. // Server will send empty frame followed by actual data frame so we need to skip the first frame. var receivedMessage = e.Socket.ReceiveMultipartStrings(); if (receivedMessage.Count > 1) { // Converting from Json. var convertedMessage = MessageQueueCommonItems.DeserializeFromJson <TResponse>(receivedMessage[1]); // Calling handler. OnResponseReady?.Invoke(convertedMessage); } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveResponseMessage, message: ErrorMessages.FailedToReceiveResponseMessage, innerException: ex, queueContext: CommonItems.ZeroMqName, address: zmqConfiguration.Address, logger: logger); } }
/// <summary> /// Helper event handler. /// </summary> private async Task ReceiveReadyAsync(BrokeredMessage brokeredMessage) { try { if (brokeredMessage != null) { // Converting from Json. var convertedMessage = MessageQueueCommonItems.DeserializeFromJson <TMessage>(new StreamReader(brokeredMessage.GetBody <Stream>()).ReadToEnd()); var lockToken = Guid.Empty; // Getting lock token if acknowledgment is configured. if (sbConfiguration.Acknowledgment) { lockToken = brokeredMessage.LockToken; } var messageReceiveOptions = new SbMessageReceiveOptions(lockToken, sbConfiguration.QueueName, sbConfiguration.Acknowledgment, ref acknowledgmentQueueClient, ref logger); // Calling handler (async is preferred over sync). if (OnMessageReadyAsync != null) { await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions); } else { OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions); } } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveMessage, message: ErrorMessages.FailedToReceiveMessage, innerException: ex, queueContext: CommonItems.ServiceBusName, queueName: sbConfiguration.QueueName, address: sbConfiguration.Address, logger: logger); } }
/// <summary> /// Helper event handler. /// </summary> private async void ReceiveReady(object sender, NetMQSocketEventArgs e) { try { string receivedMessage; // We need to lock as the sockets are not multi-threaded in ZeroMq. lock (lockForQueueOperation) { // Receiving message. receivedMessage = e.Socket.ReceiveFrameString(); } // Converting from Json. var convertedMessage = MessageQueueCommonItems.DeserializeFromJson <TMessage>(receivedMessage); var messageReceiveOptions = new ZmqMessageReceiveOptions(ref logger); // Calling handler (async is preferred over sync). if (OnMessageReadyAsync != null) { await OnMessageReadyAsync.Invoke(convertedMessage, messageReceiveOptions); } else { OnMessageReady?.Invoke(convertedMessage, messageReceiveOptions); } } catch (QueueException queueException) { #region Logging - Error logger.Fatal(queueException, queueException.Message); #endregion } catch (Exception ex) { MessageQueueCommonItems.PrepareAndLogQueueException( errorCode: QueueErrorCode.FailedToReceiveMessage, message: ErrorMessages.FailedToReceiveMessage, innerException: ex, queueContext: CommonItems.ZeroMqName, address: zmqConfiguration.Address, logger: logger); } }