コード例 #1
0
        public async Task Dispatch(BrokeredMessage message)
        {
            var requestId = Guid.Parse((string)message.Properties[MessagePropertyKeys.InReplyToRequestId]);
            var responseCorrelationWrapper = _requestResponseCorrelator.TryGetWrapper(requestId);

            if (responseCorrelationWrapper == null)
            {
                return;
            }

            var success = (bool)message.Properties[MessagePropertyKeys.RequestSuccessful];

            if (success)
            {
                var response = await _brokeredMessageFactory.GetBody(message);

                responseCorrelationWrapper.Reply(response);
            }
            else
            {
                var exceptionMessage    = (string)message.Properties[MessagePropertyKeys.ExceptionMessage];
                var exceptionStackTrace = (string)message.Properties[MessagePropertyKeys.ExceptionStackTrace];
                responseCorrelationWrapper.Throw(exceptionMessage, exceptionStackTrace);
            }
        }
コード例 #2
0
ファイル: ResponseMessagePump.cs プロジェクト: teyc/Nimbus_v2
        protected override void PumpMessage(BrokeredMessage message)
        {
            var correlationId = Guid.Parse(message.CorrelationId);
            var responseCorrelationWrapper = _requestResponseCorrelator.TryGetWrapper(correlationId);

            if (responseCorrelationWrapper == null)
            {
                Logger.Debug("Could not find correlation wrapper for reply {0} ({1}", correlationId, message.Properties[MessagePropertyKeys.MessageType]);
                return;
            }

            var success = (bool)message.Properties[MessagePropertyKeys.RequestSuccessfulKey];

            if (success)
            {
                Logger.Debug("Request {0} was successful. Dispatching reply to correlation wrapper.", correlationId);

                var responseType = responseCorrelationWrapper.ResponseType;
                var response     = message.GetBody(responseType);
                responseCorrelationWrapper.Reply(response);

                Logger.Debug("Response {0} dispatched.", correlationId);
            }
            else
            {
                var exceptionMessage    = (string)message.Properties[MessagePropertyKeys.ExceptionMessageKey];
                var exceptionStackTrace = (string)message.Properties[MessagePropertyKeys.ExceptionStackTraceKey];

                Logger.Debug("Request {0} failed. Dispatching exception to correlation wrapper: {1} {2}", correlationId, exceptionMessage, exceptionStackTrace);

                responseCorrelationWrapper.Throw(exceptionMessage, exceptionStackTrace);
            }
        }
コード例 #3
0
        public async Task Dispatch(NimbusMessage message)
        {
            if (!message.InReplyToMessageId.HasValue)
            {
                _logger.Error($"Received a reply message without an {nameof(NimbusMessage.InReplyToMessageId)} property.");
                return;
            }

            var requestId = (Guid)message.InReplyToMessageId;

            var responseCorrelationWrapper = _requestResponseCorrelator.TryGetWrapper(requestId);

            if (responseCorrelationWrapper == null)
            {
                _logger.Warn("Received a reply to request {RequestMessageId} that had no corresponding request waiting for it.", requestId);
                return;
            }

            var success = message.Properties[MessagePropertyKeys.RequestSuccessful] as bool? ?? false;

            if (success)
            {
                _logger.Debug("Received successful response");

                var response = message.Payload;
                await responseCorrelationWrapper.Reply(response);
            }
            else
            {
                _logger.Debug("Received failure response");

                var exceptionMessage    = (string)message.Properties[MessagePropertyKeys.ExceptionMessage];
                var exceptionStackTrace = (string)message.Properties[MessagePropertyKeys.ExceptionStackTrace];
                await responseCorrelationWrapper.Throw(exceptionMessage, exceptionStackTrace);
            }
        }