0

各ジョブが単一のサービスによってのみ実行されるように、単一のキューからジョブを選択する複数のマシンで実行する必要があるサービスがあります。また、リロード トリガーなど、すべてのサービスが受信するメッセージを公開する必要があります。

ハッキングしすぎずに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>
4

1 に答える 1

1

異なるマシン間のロード バランシングは、NServiceBus に付属のディストリビュータで実現されます。(リモート トランザクション読み取りは MSMQ では不安定であり、推奨されません)

したがって、送信するものはすべて同じ入力キュー、場合によっては BrokerQueue に送られます。次に、そのキューをフィードするようにディストリビューターを構成します。

ディストリビューターの構成方法の詳細については、次を参照してください。

http://tech.groups.yahoo.com/group/nservicebus/message/2009

お役に立てれば!

于 2009-12-21T12:52:23.373 に答える