未调用NServicebus通用消息处理程序
本文关键字:消息处理 程序 调用 NServicebus | 更新日期: 2023-09-27 18:28:43
我目前正在开发一个示例项目,在该项目中,我在后端使用NServiceBus来发布事件。后端应该通过一组处理程序来处理自己的事件。当我为每个事件实现一个特定的处理程序时,这很好,如下所示:
public sealed class MyEventHandler : IHandleMessages<MyEvent> { }
public sealed class OtherEventHandler : IHandleMessages<OtherEvent> { }
然而,由于这些处理程序只是将事件分派给另一个处理器,所以我想清理一下,只实现一个通用的消息处理程序:
public sealed class GenericHandler : IHandleMessages<object> { }
遗憾的是,泛型处理程序仅对项目中存在另一个特定处理程序的消息类型调用。换句话说,当我将MyEventHandler留在源中时,GenericHandler会正确地接收MyEvent事件,但当我删除此(现已过时)处理程序时,它会停止接收此消息。事实上,我的目标是从项目中删除所有特定的处理程序,并且只使用单个GenericHandler。我是否缺少配置中的一个基本步骤?
NServiceBus配置如下所示:
<UnicastBusConfig>
<MessageEndpointMappings>
<add Assembly="Kingo.Samples.Chess.Api" Endpoint="kingo.samples.chess" />
</MessageEndpointMappings>
</UnicastBusConfig>
此外:
- 上面提到的Api程序集包含所有需要发布和处理的事件
- 我使用NServiceBus的
ICommand
和IEvent
标记接口标记了所有消息 - 我将NServiceBusV5(Core)与NServiceBus.HostV6结合使用
我在EndpointConfig中有以下自定义总线配置:
void IConfigureThisEndpoint.Customize(BusConfiguration configuration) { configuration.AssembliesToScan(GetAssembliesToScan("*Chess.Api.dll", "*Chess.dll")); configuration.UsePersistence<InMemoryPersistence>(); configuration.UseContainer<UnityBuilder>(); configuration.UseSerialization<JsonSerializer>(); configuration.Conventions().DefiningEventsAs(type => type.Name.EndsWith("Event")); }
您的配置将事件定义为以"event"结尾的任何类。"对象"不符合此条件,因此您不会在通用处理程序中收到消息。
您需要使用IEvent:
public sealed class GenericHandler : IHandleMessages<IEvent> { }