代码之家  ›  专栏  ›  技术社区  ›  Ramon Smits

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

  •  4
  • Ramon Smits  · 技术社区  · 15 年前

    我对publish/subscribe的概念没有问题,但是我无法理解(自动)配置。

    脚本

    1. 此命令消息由后端(B1)接收。B1执行一些处理,然后发布通知消息M2。

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

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

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

    简而言之,B1发布M2。

    1. F1和F2如何订阅此邮件?
    2. 如果不使用自动订阅,它是如何工作的?从代码还是配置?
    2 回复  |  直到 15 年前
        1
  •  2
  •   Adam Fyles    15 年前

    如果不自动订阅,则必须在代码中显式订阅自己。首先在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
    
        2
  •  1
  •   Aaronaught    14 年前

    在F1和F2的配置文件中,在 UnicastBusConfig 部分,在 MessageEndpointMappings 以下条目:

    <add Messages="{type of M2}" Endpoint="{queue of B1}" />
    

    然后还需要在F1和F2中为M2设置一个消息处理程序。当总线看到这一点时,它将自动向B1的队列发送订阅消息,接收端的总线将存储对M2感兴趣的F1和F2队列的名称。

    .DoNotAutoSubscribe() 有点像你的场景。

    推荐文章