各ジョブが単一のサービスによってのみ実行されるように、単一のキューからジョブを選択する複数のマシンで実行する必要があるサービスがあります。また、リロード トリガーなど、すべてのサービスが受信するメッセージを公開する必要があります。
ハッキングしすぎずにnservicebusでこれは可能ですか?
パブリッシュ モデルと送信モデルの両方が機能することを証明しましたが、クライアントが両方のアーキテクチャを処理する必要があるとすぐに、クライアントはそれらすべてを送信アーキテクチャとして扱い、すべてのサービスがパブリッシュ メソッドを受け取るわけではありません。
これが私がこれまでに持っている設定ファイルです:
パブリッシャー (すべてのサービスがこれらのメッセージを受信する必要があります)、Bus.Publish<...>(...) を使用します。
<MsmqTransportConfig InputQueue="ConfigQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<!-- Message publishers don't require message queues -->
<MessageEndpointMappings /> </UnicastBusConfig>
送信者 (これらを取得できるのは 1 つのサービスのみ)、Bus.Send<...>(...) を使用:
<MsmqTransportConfig InputQueue="BrokerQueue" ErrorQueue="error" numberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig DistributorControlAddress="" DistributorDataAddress="" ForwardReceivedMessagesTo="">
<MessageEndpointMappings>
<add Messages="EventMessage, Messages" Endpoint="AgentQueue" />
</MessageEndpointMappings> </UnicastBusConfig>
サービス (それぞれ同じローカル キュー名を持ち、上記のパブリッシャーにサブスクライブします):
<MsmqTransportConfig InputQueue="AgentQueue" ErrorQueue="error" NumberOfWorkerThreads="1" MaxRetries="5" />
<UnicastBusConfig>
<MessageEndpointMappings>
<add Messages="NServiceBus.Messages.ReloadMessage, NServiceBus.Messages" Endpoint="ConfigQueue" />
</MessageEndpointMappings> </UnicastBusConfig>