Example #1
0
        private void ProcessFault(ICommand cmd, Exception ex, IMessageMetadata messageMetadata)
        {
            var fault = Fault.NewGeneric(cmd, ex, typeof(TAggregate), cmd.SagaId);
            
            var metadata = messageMetadata.CreateChild(cmd.Id,
                                           new ProcessEntry(Self.Path.Name,
                                                            CreatedFault,
                                                            CommandRaisedAnError));

            Publisher.Publish(fault, metadata);
            Log.Error(ex, "{Aggregate} raised an expection {@Exception} while executing {@Command}", State.Id, ex, cmd);
        }
Example #2
0
        private IFault PublishError(Exception exception)
        {
            var command = ExecutionContext.Command;

            Log.Error(exception, "An error occured while command execution. {@context}", ExecutionContext);

            var producedFaultMetadata = ExecutionContext.CommandMetadata.CreateChild(command.Id, _domainEventProcessFailEntry);
            var fault = Fault.NewGeneric(command, exception, command.ProcessId, typeof(TAggregate));

            Project(fault, producedFaultMetadata);
            ExecutionContext.CommandSender.Tell(fault);
            return(fault);
        }
Example #3
0
        protected virtual void PublishError(TMessage msg, IMessageMetadata metadata, Exception ex)
        {
            _log.Error(ex,
                       "Handler actor raised an error on message process: {@msg}. Count: {count}",
                       msg,
                       ++_publishFaultCount);

            var faultMetadata = metadata.CreateChild(msg.Id, FaltProcessEntry);

            var fault = Fault.NewGeneric(msg, ex, msg.ProcessId, typeof(THandler));

            Publisher.Publish(fault, faultMetadata);
        }
Example #4
0
        private void FinishWithError(IMessageMetadataEnvelop processingMessage, IActorRef messageSender, Exception error)
        {
            _log.Error(error, "Error during execution of message {@message}", processingMessage);

            var processorType = Process?.GetType() ?? typeof(TState);
            var fault         = (IFault)Fault.NewGeneric(processingMessage.Message, error.UnwrapSingle(), Id, processorType);

            var faultMetadata = MessageMetadataExtensions.CreateChild(processingMessage.Metadata, (string)fault.ProcessId, _exceptionOnTransit);

            _publisher.Publish(fault, faultMetadata);

            messageSender.Tell(new ProcessFault(fault, processingMessage.Metadata));

            Behavior.Become(AwaitingMessageBehavior, nameof(AwaitingMessageBehavior));
            ExecutionContext.Clear();
        }
Example #5
0
        private void ProcessSaga(object message, IMessageMetadata messageMetadata)
        {
            try
            {
                Saga.Transit(message);
            }
            catch (Exception ex)
            {
                var processorType = _producer.Descriptor.StateMachineType;

                _log.Error(ex, "Saga {saga} {id} raised an error on {@message}", processorType, Id, message);
                var fault = Fault.NewGeneric(message, ex, processorType, Id);

                var metadata = messageMetadata.CreateChild(fault.SagaId, _exceptionOnTransit);

                Publisher.Publish(fault, metadata);
                return;
            }

            var stateChange = ProcessSagaStateChange(messageMetadata);

            ProcessSagaCommands(messageMetadata);
        }
        protected override void OnReceive(object message)
        {
            try
            {
                var messageWithMetadata = message as IMessageMetadataEnvelop;
                if (messageWithMetadata != null)
                {
                    _group.Project(messageWithMetadata.Message, messageWithMetadata.Metadata);
                }
                else
                {
                    _group.Project(message, MessageMetadata.Empty());
                }
            }
            catch (MessageProcessException ex)
            {
                _log.Error(ex, "Handler actor raised an error on message process: {@Message}", message);

                var withMetadata = message as IMessageMetadataEnvelop;
                if (withMetadata == null)
                {
                    var fault = Fault.NewGeneric(message, ex.InnerException, ex.Type, GetSagaId(message));
                    _publisher.Publish(fault);
                }
                else
                {
                    var fault = Fault.NewGeneric(withMetadata.Message, ex.InnerException, ex.Type, GetSagaId(message));

                    var metadata = withMetadata.Metadata.CreateChild(Guid.Empty,
                                                                     new ProcessEntry(Self.Path.Name,
                                                                                      "publishing fault",
                                                                                      "message process casued an error"));

                    _publisher.Publish(fault, metadata);
                }
            }
        }