ワーカーとサブスクライバーの両方として機能するエンドポイントの構成
-
06-07-2019 - |
質問
ディストリビューターからジョブを取得し、何らかのメッセージをサブスクライブするワーカーとして機能するようにエンドポイントを構成することは可能ですか?
次のシナリオがあります(販売用語に適合)
*)中央部門は時々新しい価格のリストを発行します。すべての労働者に通知する必要があります。つまり、ワーカーはこのイベントにサブスクライブする必要があります。
*)新しい注文がセントラルに到着すると、それはディストリビューターに送信され、ディストリビューターは次に処理されるアイドルワーカーに送信します。つまり、ディストリビューターからメッセージを受信するようにワーカーを構成する必要があります。 次の構成を使用します。
<MsmqTransportConfig
InputQueue="worker"
ErrorQueue="error"
NumberOfWorkerThreads="2"
MaxRetries="5"
/>
<UnicastBusConfig
DistributorControlAddress="distributorControlBus"
DistributorDataAddress="distributorDataBus" >
<MessageEndpointMappings>
<add Messages="Events" Endpoint="messagebus" />
</MessageEndpointMappings>
</UnicastBusConfig>
ワーカーとしてのみ、またはサブスクライバーとしてのみ構成すると、すべてが期待どおりに機能しますが、両方として構成した場合は機能しません。
メッセージがセントラルの入力キューに到着し、ディストリビューターのアドレスがワーカーアドレスではなくリターンアドレスであることがわかりました。この場合、パブリッシャーはサブスクライバーを認識しません。 何か案は?事前に感謝します。
解決
Workersは、そのようにIFAIKで使用されることは想定されていません。行く方法は、価格を中央に登録し、「NewOrderMessage」が到着すると、必要な価格(その特定の注文の製品の価格のみ)でそのデータを強化し、ディストリビューターの入力キューに新しいProcessOrderRequestを送信します。
別の方法は、注文リクエストに価格を含めるために注文リクエストを送信するプロセスを持つことです。
それは理にかなっていますか?
/アンドレアス
他のヒント
ディストリビューターの背後にいる従業員は、単一の論理サブスクライバーをスケールアウトする方法であり、複数の論理サブスクライバーを処理する方法ではありません。ポイントは、ワーカーのプールから1人のワーカーのみが特定のメッセージを取得する必要があることです。その場合、すべてのワーカーがパブリッシャーに対して同じように見えるようにする必要があります。 >
スケールアウトする論理サブスクライバーが複数ある場合は、それぞれに独自のディストリビューターを割り当てます。