如何订阅邮件?自动/手动订阅如何工作?

时间:2010-09-27 15:24:36

标签: nservicebus

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

方案

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

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

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

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

    简而言之

    简而言之,B1发布了M2。

    1. F1和F2如何订阅此消息?
    2. 如果不使用自动订阅,它是如何工作的?那么从代码还是配置?

2 个答案:

答案 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()位。