netcore 3.1启动中的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由服务注册和注入,但是在启动时我无法获得它。

解决方法

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

,

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

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

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

我的工作流程是

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

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

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

,

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

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

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...