如何使用NServiceBus部分加载处理程序?

时间:2015-03-12 20:08:41

标签: c# nservicebus

我正在运行一个控制台应用程序,其中有许多处理程序扩展<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>

2 个答案:

答案 0 :(得分:2)

最简单的解决方案是将您的消息和处理程序拆分为多个项目。通常在像您这样的场景中,您希望通过配置(或命令行)参数控制这些消息/处理程序组之间存在某种逻辑分离。

NServiceBus扫描它在应用程序文件夹中找到的所有程序集,以查找所有处理程序和其他标记接口。您可以使用(V5):

限制装配列表
configuration.AssembliesToScan(myListOfAssemblies);

您可以根据配置参数构建程序集列表。如果您要在不同的部署中使用不同的处理程序集,则可以在该特定安装中部署所需的那些程序集。

您可以为消息使用一个程序集或一组程序集,这些程序集使用DefiningEventsAs调用进行配置,并为处理程序提供单独的程序集。

可以找到有关NServiceBus程序集扫描的文档here

答案 1 :(得分:0)

听起来你想要关闭自动订阅:

config.DisableFeature<AutoSubscribe>();

然后您可以单独订阅消息:

Bus.Subscribe<MyMessage>();

您可能希望首先取消订阅启动时的所有邮件(Bus.Unsubscribe),然后重新订阅您感兴趣的邮件。否则您的订阅将在您上次运行应用程序时仍然存在。