Ejemplo n.º 1
0
            public void should_send_MessageProcessingFailed_if_unable_to_deserialize_message()
            {
                SetupPeersHandlingMessage <MessageProcessingFailed>(_peerUp);

                _bus.Start();

                var command = new FakeCommand(123);

                _messageSerializer.AddSerializationExceptionFor(command.TypeId(), "Serialization error");

                using (SystemDateTime.PauseTime())
                    using (MessageId.PauseIdGeneration())
                    {
                        var transportMessage = command.ToTransportMessage();

                        var messageProcessingFailedBytes = new MessageProcessingFailed(null, null, null, DateTime.UtcNow, null).ToTransportMessage().Content;
                        _messageSerializer.AddSerializationFuncFor <MessageProcessingFailed>(x =>
                        {
                            x.FailingMessage.ShouldEqual(transportMessage);
                            x.ExceptionUtcTime.ShouldEqual(SystemDateTime.UtcNow);
                            x.ExceptionMessage.ShouldContain("Unable to deserialize message");
                            return(messageProcessingFailedBytes);
                        });

                        _transport.RaiseMessageReceived(transportMessage);

                        var processingFailedTransportMessage = new TransportMessage(MessageUtil.TypeId <MessageProcessingFailed>(), messageProcessingFailedBytes, _self);
                        _transport.ExpectExactly(new TransportMessageSent(processingFailedTransportMessage, _peerUp));
                    }
            }
Ejemplo n.º 2
0
Archivo: Bus.cs Proyecto: Bourl/Zebus
        private void SendMessageProcessingFailedIfNeeded(MessageDispatch dispatch, DispatchResult dispatchResult, TransportMessage failingTransportMessage = null)
        {
            if (dispatchResult.Errors.Count == 0 || dispatchResult.Errors.All(error => error is DomainException))
            {
                return;
            }

            if (failingTransportMessage == null)
            {
                failingTransportMessage = ToTransportMessage(dispatch.Message, MessageId.NextId());
            }

            string jsonMessage;

            try
            {
                jsonMessage = JsonConvert.SerializeObject(dispatch.Message);
            }
            catch (Exception ex)
            {
                jsonMessage = string.Format("Unable to serialize message :{0}{1}", System.Environment.NewLine, ex);
            }
            var errorMessages           = dispatchResult.Errors.Select(error => error.ToString());
            var errorMessage            = string.Join(System.Environment.NewLine + System.Environment.NewLine, errorMessages);
            var messageProcessingFailed = new MessageProcessingFailed(failingTransportMessage, jsonMessage, errorMessage, SystemDateTime.UtcNow, dispatchResult.ErrorHandlerTypes.Select(x => x.FullName).ToArray());
            var peers = _directory.GetPeersHandlingMessage(messageProcessingFailed);

            SendTransportMessage(ToTransportMessage(messageProcessingFailed, MessageId.NextId()), peers);
        }
Ejemplo n.º 3
0
        private void HandleDeserializationError(MessageTypeId messageTypeId, Stream messageStream, OriginatorInfo originator, Exception exception, TransportMessage transportMessage)
        {
            var dumpLocation = DumpMessageOnDisk(messageTypeId, messageStream);
            var errorMessage = $"Unable to deserialize message {messageTypeId.FullName}. Originator: {originator.SenderId}. Message dumped at: {dumpLocation}\r\n{exception}";

            _logger.Error(errorMessage);

            if (!_configuration.IsErrorPublicationEnabled || !IsRunning)
            {
                return;
            }

            var processingFailed = new MessageProcessingFailed(transportMessage, String.Empty, errorMessage, SystemDateTime.UtcNow, null);

            Publish(processingFailed);
        }
Ejemplo n.º 4
0
Archivo: Bus.cs Proyecto: Bourl/Zebus
        private void HandleDeserializationError(MessageTypeId messageTypeId, byte[] messageBytes, OriginatorInfo originator, Exception exception, TransportMessage transportMessage)
        {
            var dumpLocation = DumpMessageOnDisk(messageTypeId, messageBytes);
            var errorMessage = string.Format("Unable to deserialize message {0}. Originator: {1}. Message dumped at: {2}\r\n{3}", messageTypeId.FullName, originator.SenderId, dumpLocation, exception);

            _logger.Error(errorMessage);

            if (!_isRunning)
            {
                return;
            }

            var processingFailed = new MessageProcessingFailed(transportMessage, String.Empty, errorMessage, SystemDateTime.UtcNow, null);

            Publish(processingFailed);
        }
Ejemplo n.º 5
0
        public void should_send_a_MessageProcessingFailed_on_unknown_error_with_local_processing()
        {
            using (SystemDateTime.PauseTime())
                using (MessageId.PauseIdGeneration())
                {
                    var command     = new FakeCommand(123);
                    var commandJson = JsonConvert.SerializeObject(command);
                    var exception   = new Exception("Exception message");
                    SetupDispatch(command, error: exception);
                    SetupPeersHandlingMessage <FakeCommand>(_self);

                    _bus.Send(command);

                    var expectedTransportMessage = new MessageProcessingFailed(command.ToTransportMessage(_self), commandJson, exception.ToString(), SystemDateTime.UtcNow, new[] { typeof(FakeMessageHandler).FullName }).ToTransportMessage(_self);
                    _transport.Expect(new TransportMessageSent(expectedTransportMessage, _peerUp));
                }
        }
Ejemplo n.º 6
0
        public void should_send_a_MessageProcessingFailed_on_unknown_event_error()
        {
            using (SystemDateTime.PauseTime())
                using (MessageId.PauseIdGeneration())
                {
                    var message     = new FakeEvent(123);
                    var messageJson = JsonConvert.SerializeObject(message);
                    var exception   = new Exception("Exception message");
                    SetupDispatch(message, error: exception);
                    var transportMessageReceived = message.ToTransportMessage(_peerUp);

                    _transport.RaiseMessageReceived(transportMessageReceived);

                    var expectedTransportMessage = new MessageProcessingFailed(transportMessageReceived, messageJson, exception.ToString(), SystemDateTime.UtcNow, new[] { typeof(FakeMessageHandler).FullName }).ToTransportMessage(_self);
                    _transport.Expect(new TransportMessageSent(expectedTransportMessage, _peerUp));
                }
        }
Ejemplo n.º 7
0
        private void HandleDispatchErrors(MessageDispatch dispatch, DispatchResult dispatchResult, TransportMessage failingTransportMessage = null)
        {
            if (!_configuration.IsErrorPublicationEnabled || !IsRunning || dispatchResult.Errors.Count == 0 || dispatchResult.Errors.All(error => error is DomainException))
            {
                return;
            }

            var errorMessages = dispatchResult.Errors.Select(error => error.ToString());
            var errorMessage  = string.Join(System.Environment.NewLine + System.Environment.NewLine, errorMessages);

            try
            {
                if (failingTransportMessage == null)
                {
                    failingTransportMessage = ToTransportMessage(dispatch.Message);
                }
            }
            catch (Exception ex)
            {
                HandleDispatchErrorsForUnserializableMessage(dispatch.Message, ex, errorMessage);
                return;
            }

            string jsonMessage;

            try
            {
                jsonMessage = JsonConvert.SerializeObject(dispatch.Message);
            }
            catch (Exception ex)
            {
                jsonMessage = $"Unable to serialize message :{System.Environment.NewLine}{ex}";
            }

            var messageProcessingFailed = new MessageProcessingFailed(failingTransportMessage, jsonMessage, errorMessage, SystemDateTime.UtcNow, dispatchResult.ErrorHandlerTypes.Select(x => x.FullName).ToArray());

            Publish(messageProcessingFailed);
        }
Ejemplo n.º 8
0
            public void should_send_a_MessageProcessingFailed_on_dispatch_error()
            {
                SetupPeersHandlingMessage <MessageProcessingFailed>(_peerUp);

                _bus.Start();

                using (SystemDateTime.PauseTime())
                    using (MessageId.PauseIdGeneration())
                    {
                        var command = new FakeCommand(123);
                        var transportMessageReceived = command.ToTransportMessage(_peerUp);
                        var dispatch  = _bus.CreateMessageDispatch(transportMessageReceived);
                        var exception = new Exception("Test error");

                        dispatch.SetHandlerCount(1);
                        var invokerMock = new Mock <IMessageHandlerInvoker>();
                        invokerMock.SetupGet(x => x.MessageHandlerType).Returns(typeof(FakeMessageHandler));
                        dispatch.SetHandled(invokerMock.Object, exception);

                        var commandJson = JsonConvert.SerializeObject(command);
                        var expectedTransportMessage = new MessageProcessingFailed(transportMessageReceived, commandJson, exception.ToString(), SystemDateTime.UtcNow, new[] { typeof(FakeMessageHandler).FullName }).ToTransportMessage(_self);
                        _transport.Expect(new TransportMessageSent(expectedTransportMessage, _peerUp));
                    }
            }