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)}"); } }
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; }