0

NServiceBus 2.5を使用しており、ディストリビューターと連携してNServiceBusPubSubサンプルの簡略化されたバージョンを取得しようとしています。簡略化:

  • 1パブリッシャー
  • 卸売業者
  • 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>

私は最初、これはサブスクライバーをパブリッシャーに直接登録させることだと思っていましたが、そうではありません。2 人の異なるサブスクライバーが同じディストリビューターを指している状態でテストしたところ、サブスクライバーの 1 つだけが単一のイベントを発行することがわかりました。

于 2011-06-10T12:47:42.210 に答える