diff --git a/src/InterfaceForward.Application/Rabbit/RabbitClient.cs b/src/InterfaceForward.Application/Rabbit/RabbitClient.cs index 2a8b0ec..b246f5b 100644 --- a/src/InterfaceForward.Application/Rabbit/RabbitClient.cs +++ b/src/InterfaceForward.Application/Rabbit/RabbitClient.cs @@ -29,17 +29,31 @@ public class RabbitClient( } var consumer = new AsyncEventingBasicConsumer(channel); - consumer.Received += async (model, ea) => + consumer.Received += (model, ea) => + { + _ = Task.Run(async () => { - await using var scope = serviceScopeFactory.CreateAsyncScope(); - foreach (var handler in scope.ServiceProvider.GetServices()) + try { - if (handler.Enable(consumeOptions)) + await using var scope = serviceScopeFactory.CreateAsyncScope(); + foreach (var handler in scope.ServiceProvider.GetServices()) { - await handler.Handle(ea); + if (handler.Enable(consumeOptions)) + { + await handler.Handle(ea); + } } + channel.BasicAck(ea.DeliveryTag, false); } - }; + catch (Exception ex) + { + logger.LogError($"rabbit on queue({consumeOptions.Queue}) received error: {ex}"); + channel.BasicNack(ea.DeliveryTag, false, consumeOptions.FailedRequeue); + } + }); + + return Task.CompletedTask; + }; channel.CallbackException += (sender, args) => {