public async Task HandleAsync(IEvent message, ulong deliveryTag, IEventAckNack eventAckNack) { SendEmailCommand command; try { command = message.Payload.ObjectDeserializer <SendEmailCommand>(); } catch (Exception ex) { _logger?.LogError("could not deserialize payload"); _logger?.LogCritical(ex, ex.Message); throw new HandlingMinimumRequirementsFailedException("could not deserialize payload", ex); } if (!SendEmailValidation.ValidationCommand(command, _logger)) { throw new HandlingMinimumRequirementsFailedException("validation information is not valid"); } Console.WriteLine( $"Send Email To :{command?.Email} with Subject: {command?.Subject} and Message: {command?.Message}"); eventAckNack.Ack(deliveryTag); }
public async Task DispatchAsync(IEvent message, string exchange, IEventAckNack ack) { ulong deliveryTag = message.GetContext <ulong>("deliveryTag"); if (string.IsNullOrWhiteSpace(message.Payload)) { _logger?.LogError( $"empty payload received from {message.RoutingKey}"); ack.Nack(deliveryTag, false); return; } var handler = _handlers .SingleOrDefault(hc => hc.Key.Equals(exchange)) .Value; if (handler != null && handler.CanHandle(message)) { try { await handler.HandleAsync(message, deliveryTag, ack); return; } catch (HandlingMinimumRequirementsFailedException ex) { _logger?.LogError(ex, ex.Message); ack.Nack(deliveryTag, false); return; } catch (System.Exception ex) { _logger?.LogError(ex, ex.Message); throw; } } throw new CouldNotFindAnyHandlerException( $"non of handlers could not handle this type of event: {message.Payload}"); }