我正在运行一个控制台应用程序,其中有许多处理程序扩展<IHandleMessages>
。当我运行应用程序时,我想指定命令行参数,以便只运行其中一些处理程序。我正在使用现有代码,所以我有点困惑,但似乎总线配置如下:
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将扫描我的控制台项目中的所有处理程序,所以我想知道如何配置它不执行此操作(同时保留所有其他行为),并且只加载我指定的处理程序? / p>
答案 0 :(得分:2)
最简单的解决方案是将您的消息和处理程序拆分为多个项目。通常在像您这样的场景中,您希望通过配置(或命令行)参数控制这些消息/处理程序组之间存在某种逻辑分离。
NServiceBus扫描它在应用程序文件夹中找到的所有程序集,以查找所有处理程序和其他标记接口。您可以使用(V5):
限制装配列表configuration.AssembliesToScan(myListOfAssemblies);
您可以根据配置参数构建程序集列表。如果您要在不同的部署中使用不同的处理程序集,则可以在该特定安装中部署所需的那些程序集。
您可以为消息使用一个程序集或一组程序集,这些程序集使用DefiningEventsAs调用进行配置,并为处理程序提供单独的程序集。
可以找到有关NServiceBus程序集扫描的文档here。
答案 1 :(得分:0)
听起来你想要关闭自动订阅:
config.DisableFeature<AutoSubscribe>();
然后您可以单独订阅消息:
Bus.Subscribe<MyMessage>();
您可能希望首先取消订阅启动时的所有邮件(Bus.Unsubscribe),然后重新订阅您感兴趣的邮件。否则您的订阅将在您上次运行应用程序时仍然存在。