c# - start - Configurar el consumidor RabbitMQ en la aplicación ASP.NET Core
rabbitmq tutorial español (1)
Tengo una aplicación ASP.NET Core donde me gustaría consumir mensajes RabbitMQ.
He configurado con éxito editores y consumidores en aplicaciones de línea de comandos, pero no estoy seguro de cómo configurarlo correctamente en una aplicación web.
Estaba pensando en inicializarlo en Startup.cs
, pero por supuesto muere una vez que se completa el inicio.
¿Cómo inicializar al consumidor de la manera correcta desde una aplicación web?
Utilice el patrón Singleton para un oyente y DI incorporado para controlar su vida útil.
Use IApplicationLifetime
para iniciar / detener el oyente en el inicio / detención de la aplicación.
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<RabbitListener>();
}
public void Configure(IApplicationBuilder app)
{
app.UseRabbitListener();
}
}
public static class ApplicationBuilderExtentions
{
public static RabbitListener Listener { get; set; }
public static IApplicationBuilder UseRabbitListener(this IApplicationBuilder app)
{
Listener = app.ApplicationServices.GetService<RabbitListener>();
var life = app.ApplicationServices.GetService<IApplicationLifetime>();
life.ApplicationStarted.Register(OnStarted);
//press Ctrl+C to reproduce if your app runs in Kestrel as a console app
life.ApplicationStopping.Register(OnStopping);
return app;
}
private static void OnStarted()
{
Listener.Register();
}
private static void OnStopping()
{
Listener.Deregister();
}
}
- Deberías preocuparte por el alojamiento de tu aplicación. Por ejemplo, IIS puede reciclar.
- Este patrón puede ser extensivo para un grupo de oyentes.