public static IFlashApplicationBuilder UseRabbitMQ(this IFlashApplicationBuilder appBuilder, Action <IBus> setup) { var eventBus = appBuilder.app.ApplicationServices.GetRequiredService <IBus>(); var logger = appBuilder.app.ApplicationServices.GetRequiredService <ILogger <IBus> >(); eventBus.Subscribe((Messages) => { foreach (var message in Messages) { logger.LogDebug($"ACK: queue {message.QueueName} route={message.RouteKey} messageId:{message.MessageId}"); } }, async(obj) => { foreach (var message in obj.Messages) { logger.LogError($"NAck: queue {message.QueueName} route={message.RouteKey} messageId:{message.MessageId}"); } //消息消费失败执行以下代码 if (obj.Exception != null) { logger.LogError(obj.Exception, obj.Exception.Message); } var events = obj.Messages.Select(message => message.WaitAndRetry(a => 5, 3)).ToList(); var ret = !(await eventBus.PublishAsync(events)); return(ret); }); setup?.Invoke(eventBus); return(appBuilder); }
/// <summary> /// /// </summary> /// <param name="builder"></param> /// <param name="action"></param> /// <returns></returns> public static IFlashApplicationBuilder UseEventBus(this IFlashApplicationBuilder builder, Action <IServiceProvider> action) { action(builder.app.ApplicationServices); return(builder); }