我很好奇在ASP.NET Core 2.x应用程序中实现EasyNetQ pub / sub模式的正确方法。具体来说,我需要确保所有这些资源上的生命周期都是正确的,并且订阅线程必须正确拥有​​/使用。

IBus
标准做法是在应用程序的生存期内创建一个IBus实例。在您的应用程序关闭时进行处理。

因此,看起来像这样(尽管,我应该使用各种appsettings文件来提供特定于环境的连接字符串...对于这个问题,我们假设这是可以的)。

启动文件

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IBus>(RabbitHutch.CreateBus("host=localhost"));
}

Now, I like the Auto Subscriber feature, but it's not obvious when/where to run the various subscribe methods.

您可以使用它轻松地扫描特定的程序集,以实现实现IConsume或IConsumeAsync接口的类,然后让自动订阅者将这些使用方订阅到总线上。

在Startup上下文中直接运行它似乎不正确,对吗?

AutoSubscriberSingletonAutoSubscriberConfigureSubscribeAsync

启动文件

public void ConfigureServices(IServiceCollection services)
{
    services.AddSingleton<IBus>(RabbitHutch.CreateBus("host=localhost"));
    services.AddSingleton<AutoSubscriber>(provider => new AutoSubscriber(provider.GetRequiredService<IBus>(), Assembly.GetExecutingAssembly().GetName().Name));
}

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.ApplicationServices.GetRequiredService<AutoSubscriber>().SubscribeAsync(Assembly.GetExecutingAssembly());
}
BackgroundService