private async Task MarkAsDeadLetter(Event @event, string function, Exception exception = null)
        {
            var message = JsonConvert.SerializeObject(@event);

            var deadLetter = new DeadLetterMessage
            {
                Function              = function,
                MessageId             = @event?.Message?.Header?.MessageId,
                PublishedTimeStampUtc = @event?.Header.TransportTimeStamp,
                CreatedTimeStampUtc   = DateTime.UtcNow,
                Domain      = BusinessEventStore.GetDomain(@event),
                InstanceId  = @event?.Header?.InstanceId,
                MessageType = @event?.Message?.Header?.MessageType,
                Message     = message.ToCompressedBase64String(),
                Exception   = exception
            };

            try
            {
                await _deadLetterService.Handle(deadLetter);
            }
            catch (Exception e)
            {
                Console.WriteLine(
                    $"Error: MessageId: {@event?.Message?.Header?.MessageId} MarkAsDeadLetter Failed: {JsonConvert.SerializeObject(e)} DeadLetter: {JsonConvert.SerializeObject(deadLetter)}");
            }
        }
Ejemplo n.º 2
0
        public override void Send([NotNull] object message, ActorRef sender)
        {
            if (message == null)
            {
                throw new ArgumentNullException("message");
            }
            var deadLetterMessage = message as DeadLetterMessage;

            if (deadLetterMessage == null)
            {
                deadLetterMessage = new DeadLetterMessage(message, sender, this);
            }
            if (SpecialHandle(deadLetterMessage.Message, deadLetterMessage.Sender))
            {
                return;
            }
            //For now just print to console
            var deadLetter = message is DeadLetterMessage ? (message) as DeadLetterMessage : new DeadLetterMessage(message, sender ?? this, this);
            var color      = Console.ForegroundColor;

            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine(deadLetter);
            Console.ForegroundColor = color;
        }