【问题标题】:NServiceBus - scaling out subscriber duplicates events across master and workerNServiceBus - 扩展订阅者在 master 和 worker 之间重复事件
【发布时间】:2012-08-01 17:44:10
【问题描述】:

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

场景:

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

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

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

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

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

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

Queue Messages: 5

Journal Messages: 0

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

Queue Messages: 816

Journal Messages: 0

格式名称:DIRECT=OS:vm-02\private$\creditalertnotificationprocessor

Queue Messages: 816

Journal Messages: 0

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

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

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

Queue Messages: 824

Journal Messages: 817

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

Queue Messages: 0

Journal Messages: 816

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

【问题讨论】:

  • 你能发布工人的配置文件吗?

标签: nservicebus subscriber nservicebus-distributor nservicebus3


【解决方案1】:

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

【讨论】:

  • 谢谢。我从来没有想过要删除工人的 MessageEndpointConfig。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多