1

我的核心问题是如何在 NServiceBus 中扩展订阅者。请让我知道我做错了什么或我错过了什么。我很乐意回答有关我的设置的任何问题。

设想:

我在尝试扩展订户时看到了我希望的不正确行为。我在机器 01 上安装了 master,在机器 02 上安装了 worker。我卸载了这两个服务并重新安装了“NServiceBus.Production NServiceBus.Master”作为 master 的命令行,但使用 NServiceBus.Worker 作为 worker 的命令行. 两个服务都运行良好,有两个线程可用。我在关闭服务的情况下运行场景的第一部分,队列计数如下面的第一个列表所示。注意到 Master 和 Worker 中的 816 条消息了吗?我以为使用 Production 命令行安装会导致两个服务共享相同的订阅信息,并且只有 master 会收到订阅的事件,但我错了。

第二组队列计数是启动两个服务并让它们完成处理的结果。请注意 02 上的工作人员服务如何处理他原来的 816 以及分销商给他的任何东西?

此处未列出主服务器的网关、重试和超时队列以及工作人员的重试和超时队列,因为在运行服务之前和之后,队列和日志的值均为 0

// 服务关闭* ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ** * ***

格式名称:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 0

格式名称:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 0

格式名称: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

// 服务开启(并完成)* ** * ** * ** * ** * ** * ** * ** * ** * ** * ****

格式名称:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 1634

格式名称:DIRECT=OS:vm-01\private$\creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 483

格式名称: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

您无需通过配置中的 MessageEndpointMappings 进行订阅。Master 将订阅并将处理委托给该节点。您会看到重复项,因为 Worker 是自己订阅的。

于 2012-08-02T17:41:33.263 回答