Esempio n. 1
0
        public async Task <MessageHandlingResult> ProcessMessageAsync(
            Message message, IEndpointHandlingConfig handlingConfig, CancellationToken ct)
        {
            try
            {
                var messageContext = MessageContext.Create(message);

                var contractMessage = _serialiser.Deserialise <TMessage>(message);
                if (contractMessage == null)
                {
                    return(MessageHandlingResult.UnrecognisedMessageType(
                               $"Serialiser could not de-serialise message to {typeof(TMessage).AssemblyQualifiedName}",
                               message.UserProperties));
                }

                var stopwatch      = Stopwatch.StartNew();
                var handlingResult = await _handler.HandleMessageAsync(contractMessage, messageContext, ct).ConfigureAwait(false);

                _instrumentor.TrackElapsed(
                    LogEventIds.HandlerMeasuredElapsed, stopwatch.ElapsedMilliseconds, _handler.GetType().Name, message.UserProperties);

                return(handlingResult);
            }
            catch (OperationCanceledException ex)
            {
                _logger.LogWarning(LogEventIds.ProcessorCancelled, ex, $"Operation was cancelled in Processor<{typeof(TMessage).Name}>");
                return(MessageHandlingResult.Abandoned(ex, message.UserProperties));
            }
        }
Esempio n. 2
0
        public async Task Abandons_A_Message_Given_Correctly_Configured_TopicHandlingOptions_And_Result_Is_Abandoned_When_Handling_Messages()
        {
            _mockProcessor.Reset();
            _mockProcessor
            .Setup(m => m.ProcessMessageAsync(It.IsAny <Message>(), _options, CancellationToken.None))
            .ReturnsAsync(MessageHandlingResult.Abandoned(new AbandonedMutexException()));

            await _listener.StartListeningAsync(CancellationToken.None).ConfigureAwait(false);

            await ReceiveMessages(1).ConfigureAwait(false);

            _spyMessageReceiver.AbandonAsyncCalled.Should().BeTrue();
        }
Esempio n. 3
0
        public void Return_Expected_Result_Using_AbandonedMessageType_Helper_Given_Details_And_AdditionalProperties(
            string details, string additionalPropertyKey, string additionalPropertyValue)
        {
            var additionalProperties = new Dictionary <string, object>
            {
                { additionalPropertyKey, additionalPropertyValue }
            };
            var result = MessageHandlingResult.Abandoned(details, additionalProperties);

            result.Result.Should().Be(MessageHandlingResult.HandlingResult.Abandoned);
            result.AdditionalProperties["AzureBusDepot.Abandoned"].Should().Be(details);
            result.AdditionalProperties[additionalPropertyKey].Should().Be(additionalPropertyValue);
            result.AdditionalProperties.Count.Should().Be(2);
        }
Esempio n. 4
0
        public void Return_Expected_Result_Using_AbandonedMessageType_Helper_Given_Exception_And_AdditionalProperties(
            string additionalPropertyKey, string additionalPropertyValue)
        {
            var exception            = new MessageSizeExceededException("That's no moon");
            var additionalProperties = new Dictionary <string, object>
            {
                { additionalPropertyKey, additionalPropertyValue }
            };
            var result = MessageHandlingResult.Abandoned(exception, additionalProperties);

            result.Result.Should().Be(MessageHandlingResult.HandlingResult.Abandoned);
            result.AdditionalProperties["AzureBusDepot.Abandoned"].Should().Be("Exception");
            result.AdditionalProperties["AzureBusDepot.Exception.Message"].Should().Be(exception.Message);
            result.AdditionalProperties[additionalPropertyKey].Should().Be(additionalPropertyValue);
            result.AdditionalProperties.Count.Should().Be(4);
        }