netcore 3.1启动中的NServiceBus配置

时间:2020-09-17 19:48:11

标签: nservicebus

我已经阅读了所有文档和在NetCore中设置NServiceBuse的示例,但是所有示例的配置都在Program.csHost.CreateDefaultBuilder().UseNServiceBus())中完成。

我想知道是否可以在ConfigureServices的{​​{1}}方法中配置NServiceBus。 原因是在Program.cs中,我建立了所有HostBuilder选项(例如,从appsettings.json,EnvironmentVariables,AzureKeyVault,ConfigMaps等读取)和Logger实现。到IConfiguration被调用时,所有这些都已解决。我需要能够从IConfiguration中获取诸如连接字符串之类的信息,因此我认为在HostBuilder中无法做到这一点。

似乎可能需要进行很多工作才能注入ConfigureServices并扫描IMessageSession实例。这应该可以在服务中完成。

编辑:忘记添加了,因为它在IHandlMessages中,并且我们使用的是Serilog,所以我没有LoggerFactory。 LoggerFactory由服务注册和注入,但是在启动时我无法获得它。

3 个答案:

答案 0 :(得分:0)

看起来这不是一个选择。我能够找到一种解决方法来使其全部正常运行,这只是将其放入Program()中,并确保在所有其他配置完成后才调用它。这似乎并不理想,而且似乎是netcore 3发展的反模式。

答案 1 :(得分:0)

我想补充一点,这是一个糟糕的设计选择。我应该能够在启动时注册我的东西,而且应该不会进行程序包扫描。

这是一个整洁的项目,但我认为对于任何非平凡的开发来说,它可能都缺乏。

原因是我想拥有一个具有多个端点的Web主机,而如果不运行两个完整实例(https://docs.particular.net/samples/hosting/generic-multi-hosting/),我将无法做到这一点。

我的工作流程是

  1. 消息来完成所有工作
  2. 消息#1引发了超过100条消息的传奇故事
  3. 每条消息都会发布完成的更新,以便UI可以检查Saga的状态

只有处理了100余条消息(FIFO),才会处理#3中的消息。

我想要做的是有第二个队列(我们正在使用Azure服务总线)来监听工作程序更新并更新UI。

答案 2 :(得分:0)

尽管您已经有了解决方法,但我已经建立了与Serilog作为记录器和NServiceBus描述的设置类似的设置。您可以像这样访问Program.cs中的配置:

public static IHostBuilder CreateHostBuilder() =>
    Host.CreateDefaultBuilder()
        .ConfigureAppConfiguration()
        .UseSerilog()
        .UseNServiceBus(c => NServiceBusSetup.Configure(c.Configuration, c.HostingEnvironment))

在自制方法NServiceBus中。配置您可以设置端点。