如何订阅消息?自动/手动订阅如何工作?

Ram*_*its 5 nservicebus

我对发布/订阅的概念没有任何问题,但我无法理解(自动)配置。

设想

  1. 我有一个前端服务 (F1),它执行命令消息 (M1) 的 SEND。
  2. 该命令消息由后端 (B1) 接收。B1 做一些处理,然后发布通知消息 M2。
  3. 两个服务(F1 和 F2)应收到此通知消息并执行其处理/任务。

[F1] =(M1)=> [B1] =(M2)=> [F1 & F2]

F1和F2如何订阅B1发布/广播的通知消息M2?

我无法在示例中的 .config 文件或代码中找到实际配置,也无法在 NServiceBus 网络广播中找到有关此的文档。

IBus.Subscribe<T>但我看不到如何订阅某个实例。我希望我需要提供一个队列,将订阅消息发送到该队列,以便我返回可以接收发布/公告。

简而言之

简而言之,B1 发布了 M2。

  1. F1和F2如何订阅这条消息?
  2. 不使用自动订阅时如何工作?所以从代码还是配置?

Ada*_*les 2

当您不自动订阅时,您必须在代码中显式地订阅自己。首先在 EndpointConfig 类上指定 IWantCustomInitialization 接口。然后你告诉 NSB 不要自动订阅:

 NServiceBus.Configure.With()
            .DefaultBuilder()
            .XmlSerializer()
            .MsmqTransport()
            .IsTransactional(true)
            .UnicastBus()
            .DoNotAutoSubscribe()
            .LoadMessageHandlers();
Run Code Online (Sandbox Code Playgroud)

然后在您的订阅者端点中,实现 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
Run Code Online (Sandbox Code Playgroud)