如何在NServiceBus中按名称空间配置MessageEndpointMapping

时间:2010-04-01 16:33:38

标签: msmq messaging nservicebus

我正在尝试通过将来自不同命名空间的消息发送到不同的端点来在我的NServiceBus配置中配置我的消息端点映射。

因此,我在web.config中配置了以下内容:

<MessageEndpointMappings>
    <add Messages="Company.Messages.Accounts" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Payments" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Cancellations" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Notifications" Endpoint="ServiceInput" />
</MessageEndpointMappings>

但是,当我的应用程序启动时,我收到以下异常:

Spring.Objects.PropertyAccessExceptionsException:PropertyAccessExceptionsException(1个错误);嵌套的PropertyAccessExceptions是: [Spring.Core.TypeMismatchException:无法将[System.Collections.Hashtable]类型的属性值转换为属性“MessageOwners”所需的类型[System.Collections.IDictionary]。,内部异常:System.ArgumentException:加载消息程序集时遇到问题:公司.Messages.Payments ---&gt; System.IO.FileNotFoundException:无法加载文件或程序集“Company.Messages.Payments”或其依赖项之一。该系统找不到指定的文件。 文件名:'Company.Messages.Payments'

我觉得有趣的是它似乎找到了Company.Messages.Accounts但在第二个配置的行上失败了。我想也许它不喜欢让它们都进入同一个端点,但更改此配置以使它们进入不同的端点并没有改变我收到的错误消息。

我做错了什么?是不是可以按命名空间对消息进行分段(我所见过的只是按类型和汇编)?

谢谢, 史蒂夫

3 个答案:

答案 0 :(得分:14)

NSB仅支持将程序集或单个类型映射到端点。不支持命名空间,我建议您将消息程序集拆分为每个端点的单独程序集。

答案 1 :(得分:5)

根据此页面,您可以指定类型: http://docs.particular.net/nservicebus/messaging/message-owner

可以使用其限定名称来配置特定类型:“namespace.type,assembly”。

答案 2 :(得分:0)

从NServiceBus v3.3开始,名称空间可用于过滤邮件映射

http://docs.particular.net/nservicebus/messaging/message-owner