Skip to content

Instantly share code, notes, and snippets.

@gdyrrahitis
Created May 16, 2020 19:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gdyrrahitis/2b60a3007490283b6e286db7abf2e16c to your computer and use it in GitHub Desktop.
Save gdyrrahitis/2b60a3007490283b6e286db7abf2e16c to your computer and use it in GitHub Desktop.
public abstract class ConsumerBase : RabbitMqClientBase
{
private readonly IMediator _mediator;
private readonly ILogger<ConsumerBase> _logger;
protected abstract string QueueName { get; }
public ConsumerBase(
IMediator mediator,
ConnectionFactory connectionFactory,
ILogger<ConsumerBase> consumerLogger,
ILogger<RabbitMqClientBase> logger) :
base(connectionFactory, logger)
{
_mediator = mediator;
_logger = consumerLogger;
}
protected virtual async Task OnEventReceived<T>(object sender, BasicDeliverEventArgs @event)
{
try
{
var body = Encoding.UTF8.GetString(@event.Body.ToArray());
var message = JsonConvert.DeserializeObject<T>(body);
await _mediator.Send(message);
}
catch (Exception ex)
{
_logger.LogCritical(ex, "Error while retrieving message from queue.");
}
finally
{
Channel.BasicAck(@event.DeliveryTag, false);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment