1

私の主な質問は、NServiceBus でサブスクライバーをスケールアウトする方法です。私が間違っていること、または見逃したことを教えてください。セットアップに関するご質問には喜んでお答えします。

シナリオ:

サブスクライバーをスケールアウトしようとしたときに、間違った動作であることを願っています。マシン01にマスター、マシン02にワーカーがあります。両方のサービスをアンインストールし、マスターのコマンドラインとして「NServiceBus.Production NServiceBus.Master」を使用して再インストールしましたが、ワーカーにはNServiceBus.Workerを使用して再インストールしました. 2 つのスレッドが利用可能で、両方のサービスが正常に動作しています。サービスをオフにしてシナリオの最初の部分を実行したところ、キュー カウントは以下の最初のリストのようになりました。マスターとワーカーの両方にある 816 メッセージに注目してください。Production コマンド ラインでインストールすると、2 つのサービスが同じサブスクリプション情報を共有し、マスターだけがサブスクライブ先のイベントを受け取ると思っていましたが、間違っていました。

キュー カウントの 2 番目のセットは、両方のサービスを起動して処理を終了させた結果です。02 のワーカー サービスが、元の 816 とディストリビューターから渡されたものをどのように処理したかに注目してください。

マスターのゲートウェイ、再試行、およびタイムアウト キューと、ワーカーの再試行およびタイムアウト キューは、サービスの実行前と実行後に、キューとジャーナルの両方で値が 0 だったため、ここにはリストされていません。

// サービス オフ* ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ***

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 0

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 0

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.storage

Queue Messages: 5

Journal Messages: 0

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor

Queue Messages: 816

Journal Messages: 0

FormatName:DIRECT=OS:vm-02\private$\creditalertnotificationprocessor

Queue Messages: 816

Journal Messages: 0

// サービス ON (および終了) * ** * ** * ** * ** * ** * ** * ** * ** * ** * ****

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 1634

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 483

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.storage

Queue Messages: 824

Journal Messages: 817

FormatName:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor

Queue Messages: 0

Journal Messages: 816

FormatName:DIRECT=OS:vm-02\private$\creditalertnotificationprocessor

Queue Messages: 0

Journal Messages: 1149

ワーカー構成ファイル...

    <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="UnicastBusConfig" type="NServiceBus.Config.UnicastBusConfig, NServiceBus.Core" />
    <section name="MessageForwardingInCaseOfFaultConfig" type="NServiceBus.Config.MessageForwardingInCaseOfFaultConfig, NServiceBus.Core" />
    <section name="MsmqTransportConfig" type="NServiceBus.Config.MsmqTransportConfig, NServiceBus.Core" />
    <section name="MasterNodeConfig" type="NServiceBus.Config.MasterNodeConfig, NServiceBus.Core" />
  </configSections>

  <MasterNodeConfig Node="vm-01"/>

  <UnicastBusConfig>
    <MessageEndpointMappings>
      <add Messages="Sample.Common.Messages.Commands.LogMessage, Sample.BusFramework.Common" Endpoint="Sample.BusFramework.LogMessageProcessor@vm-01" />
      <add Messages="Sample.Credit" Endpoint="Sample.Credit.AlertBackfillProcessor" />
    </MessageEndpointMappings>
  </UnicastBusConfig>
  <MessageForwardingInCaseOfFaultConfig ErrorQueue="error" />
  <MsmqTransportConfig NumberOfWorkerThreads="2" MaxRetries="1" />

  <connectionStrings>
    <add name="ApplicationLog" connectionString="" providerName="" />
    <add name="ProductFulfillment" connectionString="" providerName="" />
  </connectionStrings>

  <appSettings>
    <add key="BusLoggingThreshold" value="DEBUG"/>
  </appSettings>

</configuration>
4

1 に答える 1

1

config で MessageEndpointMappings を介してサブスクライブする必要はありません。マスターはサブスクライブし、このノードに処理を委譲します。ワーカーが独自にサブスクライブされているため、重複が表示されます。

于 2012-08-02T17:41:33.263 に答える