我已更新到NServiceBus 6,其中IProvideConfiguration<UnicastBusConfig>
及其MessageEndpointMappings
已过时。
我已按照文档中的发布/订阅说明进行操作。据我了解,现在需要在订阅事件时明确命名发布端点。
之前,我可以指定事件接口,端点将是订户的名称:
config.MessageEndpointMappings.Add(
new MessageEndpointMapping
{
AssemblyName = MyAssemblyName,
TypeFullName = typeof( IMyEvent ) ),
Endpoint = "SubscribingEndpoint"
} );
现在:
这消失了,我有以下。这完全取代了对IProvideConfiguration
类的需求:
var routing = endpointConfiguration.UseTransport<MsmqTransport>().Routing();
endpointConfiguration.SendFailedMessagesTo( "error" );
endpointConfiguration.AuditProcessedMessagesTo( "audit" );
//register command
routing.RouteToEndpoint( typeof( MyCommand), "SomeEndpoint" );
//subscribe to event
routing.RegisterPublisher(typeof(IMyEvent), "PublishingEndpoint" ); //?
所以在这里我必须指定IMyEvent的发布者,而不是订阅者。 在NSB5中,这不是必需的。
那么如果事件是由多个端点发布的,我该怎么办?
答案 0 :(得分:1)
回答你的问题:
那么如果事件是由多个端点发布的,我该怎么办?
您可以通过来自订阅者的多个RegisterPublisher
来自多个发布商订阅相同的活动。
请注意,如果从多个逻辑端点发布相同的事件,通常会将其视为气味。您可能需要考虑为每个逻辑端点使用不同的事件类型,或者可以从事件切换到命令。如果您对邮件设计不确定,强烈建议您访问Particular Software Google Group,我们非常乐意为您提供设计问题,以解决此问题。
关于V5和V6之间的变化:
在NSB5中,订阅者将通过在MessageEndpointMapping中使用自己的端点名称而不是发布者的端点名称来订阅,如上所示。
我很难听完这个说法。 V5和V6使用相同的方法进行订阅,只是使用不同的语法。
由于您使用的是MSMQ,因此订阅者必须向每个事件发布者发送订阅消息。为了使订户知道在哪里发送订阅消息,它需要路由信息。这是V5和V6使用不同语法的地方:
SubscribingEndpoint
)。 如您所见,V5和V6之间的语法只有差异,概念应该没有变化。既然你声称上面的例子适合你,我只能想象为什么会这样的原因:
无论其中一个原因是否可以解释您所看到的行为,当使用NServiceBus进行MSMQ传输时,订阅者始终需要为发布者配置路由,以便订阅消息到达发布者。这种设计在V5和V6之间没有变化。
有一个很好的示例演示了特定文档中可用的V5和V6中的发布/订阅:https://docs.particular.net/samples/pubsub/?version=core_5
我已更新到NServiceBus 6,其中IProvideConfiguration及其MessageEndpointMappings已过时。
请注意,在V6中,这两个API都已被废弃并带有警告,但它们仍然可以继续工作。这些API将在下一个主要版本中删除。
我希望这可以解决一些问题。