NServiceBus - 扩展订阅者跨主服务器和工作程序复制事件

时间:2012-08-01 17:44:11

标签: nservicebus subscriber nservicebus-distributor nservicebus3

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

情景:

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

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

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

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

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 0

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 0

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.distributor.storage

Queue Messages: 5

Journal Messages: 0

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor

Queue Messages: 816

Journal Messages: 0

FORMATNAME:DIRECT = OS:VM-02 \私人$ \ creditalertnotificationprocessor

Queue Messages: 816

Journal Messages: 0

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

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.distributor.control

Queue Messages: 0

Journal Messages: 1634

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.worker

Queue Messages: 0

Journal Messages: 483

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor.distributor.storage

Queue Messages: 824

Journal Messages: 817

FORMATNAME:DIRECT = OS:VM-01 \私人$ \ creditalertnotificationprocessor

Queue Messages: 0

Journal Messages: 816

FORMATNAME:DIRECT = OS:VM-02 \私人$ \ 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>

1 个答案:

答案 0 :(得分:1)

您无需通过配置中的MessageEndpointMappings进行订阅。 Master将订阅并委派处理到此节点。您看到重复,因为工作人员自己订阅。