NServiceBus:麻烦让PubSub与分销商合作

时间:2011-06-10 11:50:34

标签: nservicebus publish-subscribe nservicebus-distributor

我正在使用NServiceBus 2.5并试图获得与分发服务器一起使用的NServiceBus PubSub示例的简化版本。简化:

  • 1发布商
  • 经销商
  • 1订阅者 所有这些都在一台机器上。

我希望在进入更复杂的事情之前让这个工作,例如在一个经销商,多台机器等背后的多个订户。

首先,我得到了简化的pub子示例在没有经销商的情况下工作(即1个pub和1个子 - 我得到了正常工作)。

据我了解,它的工作方式是: 分发者定义自己的控制和数据队列。 发布者拥有它的控制队列,但没有其他配置引用此队列。发布者引用分发数据队列。 订户指的是分销商数据和控制队列。

我无法让简化的pub-sub经销商使用此配置。我已经对发布者进行了一些调试,我发现发布者的Bus.Publish没有找到任何发布的订阅者。

任何想法我做错了什么以及我需要做些什么才能让它发挥作用?

以下是每个人的配置:

发布商

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>

  <MsmqTransportConfig InputQueue="MyPublisherInputQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />

  <UnicastBusConfig>
    <MessageEndpointMappings>
        <add Messages="MyMessages" Endpoint="distributorDataBus" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

</configuration> 

分销商                          

    <add key="DataInputQueue" value="distributorDataBus"/>
    <add key="ControlInputQueue" value="distributorControlBus"/>
    <add key="ErrorQueue" value="error"/>
    <add key="StorageQueue" value="distributorStorage"/>

    <add key="NameSpace" value="http://www.UdiDahan.com"/> 
    <!-- relevant for a Serialization of "interfaces" or "xml" -->

    <add key="Serialization" value="xml"/>
    <!-- can be either "xml", or "binary" -->
  </appSettings>
</configuration>

订户

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
  </configSections>

  <MsmqTransportConfig
    InputQueue="Subscriber1InputQueue_1"
    ErrorQueue="error"
    NumberOfWorkerThreads="1"
    MaxRetries="5"
  />

  <UnicastBusConfig  DistributorControlAddress="distributorControlBus" DistributorDataAddress="distributorDataBus">
    <MessageEndpointMappings />
  </UnicastBusConfig>

</configuration>

1 个答案:

答案 0 :(得分:1)

好的,我终于有了这个工作。关键线索来自这里:http://tech.groups.yahoo.com/group/nservicebus/message/8525

基本上,需要通过添加此部分来指向发布者:

<UnicastBusConfig  DistributorControlAddress="distributorControlBus" DistributorDataAddress="distributorDataBus">
  <MessageEndpointMappings>
    <add Messages="MyMessages" Endpoint="MyPublisherInputQueue" />
  </MessageEndpointMappings>
</UnicastBusConfig>

我最初认为这使得订阅者直接向发布者注册,但没有。我测试了两个不同的订户指向同一个分销商并注意到只有一个订阅者发布了任何单个事件。