1

ディストリビューターからジョブを取得するワーカーとして機能し、ある種のメッセージをサブスクライブするようにエンドポイントを構成することは可能ですか?

私は次のシナリオを持っています(販売用語に適合)

*)中央部門は時々新しい価格のリストを公開します。すべての労働者に通知する必要があります。つまり、ワーカーはこのイベントにサブスクライブする必要があります。

*)新しい注文がセントラルに到着すると、ディストリビューターに送信され、ディストリビューターは次のアイドル状態のワーカーに送信して処理します。つまり、ディストリビューターからメッセージを受信するようにワーカーを構成する必要があります。次の構成を使用します。

 <MsmqTransportConfig
    InputQueue="worker"
    ErrorQueue="error"
    NumberOfWorkerThreads="2"
    MaxRetries="5"
  />

  <UnicastBusConfig
    DistributorControlAddress="distributorControlBus"
    DistributorDataAddress="distributorDataBus" >    
    <MessageEndpointMappings>
      <add Messages="Events" Endpoint="messagebus" />
    </MessageEndpointMappings>
  </UnicastBusConfig>

ワーカーとしてのみ、またはサブスクライバーとしてのみ構成すると、すべてが期待どおりに機能しますが、両方として構成した場合は機能しません。

中央の入力キューに、ディストリビューターのアドレスがワーカーアドレスではなくリターンアドレスとしてメッセージが到着し、この場合、パブリッシャーはサブスクライバーを認識しないことを発見しました。何か案は?前もって感謝します。

4

2 に答える 2

1

労働者はそのように使用されるべきではありません。行く方法は、中央に価格をサブスクライブさせ、「NewOrderMessage」が到着したら、必要な価格(おそらくその特定の注文の製品の価格のみ)でそのデータを充実させ、新しい ProcessOrderRequest を入力に送信することだと思いますディストリビューターのキュー。

もう 1 つの方法は、注文リクエストに価格を含めるように注文リクエストを送信するプロセスを持つことです。

それは意味がありますか?

/アンドレアス

于 2009-10-23T10:53:40.050 に答える
1

ディストリビューターの背後にあるワーカーは、複数の論理サブスクライバーを処理する方法ではなく、単一の論理サブスクライバーをスケールアウトする方法です。要点は、ワーカーのプールから 1 つのワーカーだけが特定のメッセージを受け取る必要があるということです。この場合、すべてのワーカーがパブリッシャーから同じように見えるようにする必要があります。これが、ディストリビューターのアドレスが指定されている理由です。

スケールアウトする論理サブスクライバーが複数ある場合は、それぞれに独自のディストリビューターを割り当てます。

于 2009-10-23T16:17:05.030 に答える