我对发布/订阅的概念没有任何问题,但我无法理解(自动)配置。
[F1] =(M1)=> [B1] =(M2)=> [F1& F2]
F1和F2如何订阅由B1发布/广播的通知消息M2?
我无法在.config文件或示例中的代码中找到实际配置,我在NServiceBus网络广播上找不到相关文档。
有IBus.Subscribe<T>
但我看不到如何订阅某个实例。我希望我需要提供一个队列来发送订阅消息,以便我返回可以接收发布/公告。
简而言之,B1发布了M2。
答案 0 :(得分:2)
如果您不自动订阅,则必须在代码中明确订阅。首先在EndpointConfig类上指定IWantCustomInitialization接口。然后你告诉NSB不要自动订阅:
NServiceBus.Configure.With()
.DefaultBuilder()
.XmlSerializer()
.MsmqTransport()
.IsTransactional(true)
.UnicastBus()
.DoNotAutoSubscribe()
.LoadMessageHandlers();
然后在您的订户端点中,实现IWantToRunAtStartup接口。在那里,您可以订阅特定消息,例如:
#region IWantToRunAtStartup Members
public void Run()
{
this.Bus.Subscribe<IProductUpdatedEvent>();
this.Bus.Subscribe<IProductCreatedEvent>();
}
public void Stop()
{
this.Bus.Unsubscribe<IProductUpdatedEvent>();
this.Bus.Unsubscribe<IProductCreatedEvent>();
}
#endregion
答案 1 :(得分:1)
在F1和F2的配置文件中,在UnicastBusConfig
部分的MessageEndpointMappings
以下条目下:
<add Messages="{type of M2}" Endpoint="{queue of B1}" />
然后你还需要在F1中使用消息处理程序,在M2中使用F2。当总线看到这个时,它会自动将订阅消息发送到B1的队列,接收端的总线将存储对M2感兴趣的F1和F2队列的名称。
您的方案可能不需要.DoNotAutoSubscribe()
位。