C# 什么';在ASP.NET Core 2.x中实现EasyNetQ发布/订阅模式的正确方法是什么?
我很好奇在ASP.NET Core 2.x应用程序中实现EasyNetQ发布/订阅模式的正确方法。具体来说,我需要确保所有这些资源上的生命周期都是正确的,并且订阅线程都是正确拥有/活动的 我知道C# 什么';在ASP.NET Core 2.x中实现EasyNetQ发布/订阅模式的正确方法是什么?,c#,asp.net-core,easynetq,C#,Asp.net Core,Easynetq,我很好奇在ASP.NET Core 2.x应用程序中实现EasyNetQ发布/订阅模式的正确方法。具体来说,我需要确保所有这些资源上的生命周期都是正确的,并且订阅线程都是正确拥有/活动的 我知道IBus应该是单身人士 标准做法是在应用程序的生命周期内创建一个IBus实例。在应用程序关闭时处理它 因此,看起来是这样的(尽管,我应该使用各种appsettings文件来提供特定于环境的连接字符串……假设就这个问题而言,这是可以的) Startup.cs public void配置服务(IServic
IBus
应该是单身人士
标准做法是在应用程序的生命周期内创建一个IBus实例。在应用程序关闭时处理它
因此,看起来是这样的(尽管,我应该使用各种appsettings文件来提供特定于环境的连接字符串……假设就这个问题而言,这是可以的)
Startup.cs
public void配置服务(IServiceCollection服务)
{
services.AddSingleton(RabbitHutch.CreateBus(“host=localhost”);
}
现在,我喜欢这个特性,但不清楚何时何地运行各种subscribe方法
您可以使用它轻松地扫描特定程序集,查找实现接口IConsume或IConsumeAsync的类,然后让自动订阅者将这些使用者订阅到您的总线
在启动环境中直接运行它似乎是不对的,对吗
- 订阅线程是否由正确的父线程“拥有”(是否存在这种情况)
的预期/正确生命周期是什么,AutoSubscriber
是否有必要Singleton
- 我真的想注册自动订户吗?我不希望任何其他代码需要它,我只需要方便/正确地访问
(似乎是运行Configure
之类的方法的合适位置)subscribebeasync
public void配置服务(IServiceCollection服务)
{
services.AddSingleton(RabbitHutch.CreateBus(“host=localhost”);
相反,services.AddSingleton(我应该实现启动/停止方法还是BackgroundService
OK)?我遇到了同样的难题。我发现您可以将容器中注册的任何内容注入Startup::配置并执行一次性启动任务,如使用AutoSubscriber
public void Configure(IApplicationBuilder app, IHostingEnvironment env, IBus bus)
{
var subscriber = new AutoSubscriber(bus, Assembly.GetExecutingAssembly().GetName().Name);
subscriber.Subscribe(Assembly.GetExecutingAssembly());
}
这只是一个基于使用NodeJ使用RabbitMQ的经验的假设。强烈建议在使用RabbitMQ时,您只有一个连接,始终保持连接。如果您的代码连接、发布,然后断开连接,您对自己和使用RabbitMQ服务器的人都不利。因此,我不会感到惊讶您需要一个单例,因为它总是返回相同的实例aka。只需使用一个连接。您的CreateBus
可能需要比host=localhost
更多的参数,例如port
、username
、password
和vhost
。我希望这对您有所帮助。对不起,您失去了我。发生了什么事恩?@acarlstein我不关心IBU的生命周期。我已经讨论过了。EasyNetQ处理主要工作线程。我不打开/关闭任何东西。我关心的是ASP.NET核心框架和EasyNetQ公开的消费模式的交叉点。