private async Task QueueListener_RequestReceived(object sender, RawRequestReceivedEventArgs e) { var iMessages = Counters.IncrementMessages(); try { if (_serverQueues?.AdditionalSendQueues?.Any() == true) { e.ResponseQueues.AddRange(_serverQueues.AdditionalSendQueues); } Counters.IncrementTotalReceivingBytes(e.MessageLength); Core.Log.InfoDetail("Request message received with CorrelationId = {0} . Current messages processing = {1}", e.CorrelationId, iMessages); if (RequestReceived != null) { await RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false); } if (MQueueRawServerEvents.RequestReceived != null) { await MQueueRawServerEvents.RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false); } if (e.SendResponse && e.Response != null) { var response = e.Response; RawResponseSentEventArgs rsea = null; if (BeforeSendResponse != null || MQueueRawServerEvents.BeforeSendResponse != null || ResponseSent != null || MQueueRawServerEvents.ResponseSent != null) { rsea = new RawResponseSentEventArgs(Name, response, e.CorrelationId); if (BeforeSendResponse != null) { await BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false); } if (MQueueRawServerEvents.BeforeSendResponse != null) { await MQueueRawServerEvents.BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false); } } response = rsea?.Message ?? e.Response; var sentBytes = await OnSendAsync(response, e).ConfigureAwait(false); if (sentBytes > -1) { if (rsea != null) { rsea.MessageLength = sentBytes; if (ResponseSent != null) { await ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false); } if (MQueueRawServerEvents.ResponseSent != null) { await MQueueRawServerEvents.ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false); } } } else { Core.Log.Warning("The message couldn't be sent."); } } Counters.DecrementMessages(); Counters.IncrementTotalMessagesProccesed(); } catch (Exception) { Counters.IncrementTotalExceptions(); Counters.DecrementMessages(); throw; } }
private async Task QueueListener_RequestReceived(object sender, RawRequestReceivedEventArgs e) { var iMessages = Counters.IncrementMessages(); try { if (_serverQueues?.AdditionalSendQueues?.Any() == true) { e.ResponseQueues.AddRange(_serverQueues.AdditionalSendQueues); } #region Client Queues Routes Rebindings if (_serverQueues.ClientQueuesRoutesRebindings != null) { Core.Log.LibDebug("Processing ClientQueues Route Rebinding"); foreach (var queue in e.ResponseQueues) { if (queue.IsSkippingRoute()) { continue; } if (_serverQueues.ClientQueuesRoutesRebindings.TryGet(queue.Route, out var qRebinding)) { Core.Log.LibVerbose("Rebinding Route: '{0}' to '{1}'", queue.Route, qRebinding.Value); queue.Route = qRebinding.Value; } else { Core.Log.LibVerbose("Route '{0}' doesn't have a Rebinding.", queue.Route); } } } #endregion Counters.IncrementTotalReceivingBytes(e.MessageLength); Core.Log.LibDebug("Request message received with CorrelationId = {0} . Current messages processing = {1}", e.CorrelationId, iMessages); if (RequestReceived != null) { await RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false); } if (MQueueRawServerEvents.RequestReceived != null) { await MQueueRawServerEvents.RequestReceived.InvokeAsync(sender, e).ConfigureAwait(false); } if (e.SendResponse && e.Response != MultiArray <byte> .Empty) { var response = e.Response; RawResponseSentEventArgs rsea = null; if (BeforeSendResponse != null || MQueueRawServerEvents.BeforeSendResponse != null || ResponseSent != null || MQueueRawServerEvents.ResponseSent != null) { rsea = new RawResponseSentEventArgs(Name, response, e.CorrelationId); if (BeforeSendResponse != null) { await BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false); } if (MQueueRawServerEvents.BeforeSendResponse != null) { await MQueueRawServerEvents.BeforeSendResponse.InvokeAsync(this, rsea).ConfigureAwait(false); } } response = rsea?.Message ?? e.Response; var sentBytes = await OnSendAsync(response, e).ConfigureAwait(false); if (sentBytes > -1) { if (rsea != null) { rsea.MessageLength = sentBytes; if (ResponseSent != null) { await ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false); } if (MQueueRawServerEvents.ResponseSent != null) { await MQueueRawServerEvents.ResponseSent.InvokeAsync(this, rsea).ConfigureAwait(false); } } } else { Core.Log.Warning("The message couldn't be sent."); } } Counters.DecrementMessages(); Counters.IncrementTotalMessagesProccesed(); } catch (Exception) { Counters.IncrementTotalExceptions(); Counters.DecrementMessages(); throw; } }