如何使用 NServiceBus 部分加载处理程序?
How can I partially load handlers with NServiceBus?
我正在 运行 开发一个控制台应用程序,其中有大量扩展 <IHandleMessages>
的处理程序。当我 运行 应用程序时,我想指定命令行参数,这样只有一些处理程序会 运行ning。我正在部分使用现有代码,所以我有点困惑,但总线似乎是这样配置的:
public static BusConfiguration MyMessageConventions(this BusConfiguration config)
{
config.UseSerialization<JsonSerializer>();
config.UseTransport<RabbitMQTransport>();
config.UsePersistence<InMemoryPersistence>();
var conventionsBuilder = config.Conventions();
conventionsBuilder.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("DE.STEP.Messages") && t.Namespace.EndsWith("Events"));
return config;
}
这就是它的全部内容,据我所知,这使我不必实现 IMessage
接口。现在,正如我所见,NServiceBus 将扫描我的控制台项目中的所有处理程序,所以我想知道如何将它配置为不这样做(同时保留所有其他行为),并且只加载我指定的处理程序?
听起来你想关闭自动订阅:
config.DisableFeature<AutoSubscribe>();
然后您可以单独订阅消息:
Bus.Subscribe<MyMessage>();
您可能希望在启动时先取消订阅所有消息 (Bus.Unsubscribe),然后重新订阅您感兴趣的消息。否则您的订阅仍将存在于上次您 运行 应用程序。
最简单的解决方案是将您的消息和处理程序拆分到多个项目中。通常在像您这样的场景中,这些 messages/handlers 组之间存在某种逻辑分离,您希望通过配置(或命令行)参数控制这些组。
NServiceBus 扫描它在应用程序文件夹中找到的所有程序集,以查找所有处理程序和其他标记接口。您可以使用 (V5):
限制程序集列表
configuration.AssembliesToScan(myListOfAssemblies);
您可以根据您的配置参数构建程序集列表。如果您有不同的部署,您希望在其中使用不同的处理程序集,您可以只部署在该特定安装中需要的那些程序集。
您可以为您的消息使用一个程序集或一组程序集,这些程序集使用您的 DefiningEventsAs 调用进行配置,并为处理程序提供单独的程序集。
关于NServiceBus程序集扫描的文档可以找到here。
我正在 运行 开发一个控制台应用程序,其中有大量扩展 <IHandleMessages>
的处理程序。当我 运行 应用程序时,我想指定命令行参数,这样只有一些处理程序会 运行ning。我正在部分使用现有代码,所以我有点困惑,但总线似乎是这样配置的:
public static BusConfiguration MyMessageConventions(this BusConfiguration config)
{
config.UseSerialization<JsonSerializer>();
config.UseTransport<RabbitMQTransport>();
config.UsePersistence<InMemoryPersistence>();
var conventionsBuilder = config.Conventions();
conventionsBuilder.DefiningEventsAs(t => t.Namespace != null && t.Namespace.StartsWith("DE.STEP.Messages") && t.Namespace.EndsWith("Events"));
return config;
}
这就是它的全部内容,据我所知,这使我不必实现 IMessage
接口。现在,正如我所见,NServiceBus 将扫描我的控制台项目中的所有处理程序,所以我想知道如何将它配置为不这样做(同时保留所有其他行为),并且只加载我指定的处理程序?
听起来你想关闭自动订阅:
config.DisableFeature<AutoSubscribe>();
然后您可以单独订阅消息:
Bus.Subscribe<MyMessage>();
您可能希望在启动时先取消订阅所有消息 (Bus.Unsubscribe),然后重新订阅您感兴趣的消息。否则您的订阅仍将存在于上次您 运行 应用程序。
最简单的解决方案是将您的消息和处理程序拆分到多个项目中。通常在像您这样的场景中,这些 messages/handlers 组之间存在某种逻辑分离,您希望通过配置(或命令行)参数控制这些组。
NServiceBus 扫描它在应用程序文件夹中找到的所有程序集,以查找所有处理程序和其他标记接口。您可以使用 (V5):
限制程序集列表configuration.AssembliesToScan(myListOfAssemblies);
您可以根据您的配置参数构建程序集列表。如果您有不同的部署,您希望在其中使用不同的处理程序集,您可以只部署在该特定安装中需要的那些程序集。
您可以为您的消息使用一个程序集或一组程序集,这些程序集使用您的 DefiningEventsAs 调用进行配置,并为处理程序提供单独的程序集。
关于NServiceBus程序集扫描的文档可以找到here。