我已更新到NServiceBus 6,其中IProvideConfiguration<UnicastBusConfig>
及其MessageEndpointMappings
已过时。在NServiceBus 6中,端点是否可以在不知道发布端点的情况下订阅事件?
我遵循文档中的发布/订阅说明。据我了解,现在需要在订阅事件时明确命名发布端点。
之前,我会具体事件接口,终点将是用户的名称:
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中,这不是必需的。
那么如果事件由多个端点发布,我该怎么办?
一个事件总是只从一个端点发布(遵循该规则,只有一个发布者......),并且AFAIK始终需要为事件提供发布者地址......您想要什么做? –
@SeanFarmar我明白一个事件只应该由一个端点发布。在NSB5中,订阅者将按照上面所示的方式进行订阅,方法是在MessageEndpointMapping中使用自己的端点名称,而不是发布者的端点名称。 v5文档同样多。这是一个比事件VS命令问题更多的配置问题问题。在这种情况下发送一个命令是可行的,除了为它设置路由更多的工作。 – John
我很困惑,您能否提供链接,指出您可以使用端点的名称而不是发布者的端点名称? AFAIK始终如此(有意义的是)订阅者会向发布者发送订阅消息,因此它需要配置中的发布者端点名称... –