private async Task ProcessMessage(QueuedMessage message, IOutboundQueueConsumer queue) { try { await ProduceMessage(message.Message); await queue.Acknowledge(message); } catch (Exception ex) { _messageLogger.LogError(_logger, ex, "Failed to publish queued message.", message?.Message.Message, message?.Message.Endpoint); await queue.Retry(message); // Rethrow if message order has to be preserved, otherwise go ahead with next message in the queue if (_enforceMessageOrder) { throw; } } }
private async Task ProcessQueue(IOutboundQueueConsumer queue, CancellationToken stoppingToken) { _logger.LogTrace($"Reading outbound messages from queue (limit: {_readPackageSize})."); var messages = (await queue.Dequeue(_readPackageSize)).ToList(); if (!messages.Any()) { _logger.LogTrace("The outbound queue is empty."); } for (var i = 0; i < messages.Count; i++) { _logger.LogTrace($"Processing message {i + 1} of {messages.Count}."); await ProcessMessage(messages[i], queue); if (stoppingToken.IsCancellationRequested) { break; } } }
public OutboundQueueHealthCheckService(IOutboundQueueConsumer queue) { _queue = queue; }