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);
        }
Beispiel #2
0
        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}");
        }