0

我正在使用 NServiceBus 2.5 并尝试让 NServiceBus PubSub 示例的简化版本与分销商一起使用。简化:

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

在我继续处理更复杂的事情之前,我想先完成这项工作,例如单个分销商背后的多个订户、多台机器等。

首先,我得到了简化的 pub sub 示例,在没有分发器的情况下工作(即 1 个 pub 和 1 个 sub - 我得到了很好的工作)。

据我了解,它应该工作的方式是:分发器定义自己的控制和数据队列。发布者有它的控制队列,但没有其他配置引用这个队列。发布者指的是分发数据队列。订阅者指的是分发者的数据和控制队列。

我无法让简化的 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>
4

1 回答 1

1

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

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

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

我最初认为这是让订阅者直接向发布者注册,但不是。我用两个指向同一个分发者的不同订阅者对此进行了测试,并注意到只有一个订阅者可以发布任何单个事件。

于 2011-06-10T12:47:42.210 回答