NServiceBus分发服务器-如何拆分应用程序

NServiceBus分发服务器-如何拆分应用程序,nservicebus,nservicebus-distributor,Nservicebus,Nservicebus Distributor,我们有一个服务,它从数据库中选择som id,然后用一些业务逻辑顺序处理它们。我们希望扩展处理并并行执行,而不创建大量内部线程 我的问题是: 如果我想利用分销商扩大规模,我应该如何做 解决方案1: 该服务分为2部分: 原始服务被修改为仅从数据库中选择ID,然后将其发送给工作人员。这将是分发服务器(运行distributor WithNowWorkerOnitSendPoint) 一个新的服务,它将保持业务逻辑,并作为一个工作者,处理每个输入id。如果我想要更多的工作者,我只需多次启动相同的过程

我们有一个服务,它从数据库中选择som id,然后用一些业务逻辑顺序处理它们。我们希望扩展处理并并行执行,而不创建大量内部线程

我的问题是:

如果我想利用分销商扩大规模,我应该如何做

解决方案1: 该服务分为2部分:

  • 原始服务被修改为仅从数据库中选择ID,然后将其发送给工作人员。这将是分发服务器(运行distributor WithNowWorkerOnitSendPoint)
  • 一个新的服务,它将保持业务逻辑,并作为一个工作者,处理每个输入id。如果我想要更多的工作者,我只需多次启动相同的过程
  • 解决方案2: 该服务分为3部分:

  • 原始服务被修改为仅从数据库中选择ID,然后将其发送到分发服务器
  • 一个新的服务,分发服务器(RunDistributorWithNowWorkerOnitSendPoint),它只处理工作人员的负载平衡
  • 一个新的服务,worker(s),它将保存业务逻辑并处理每个输入id
  • 解决方案3: 该服务分为2部分:

  • 原始服务被修改为仅从数据库中选择ID,然后发送它们。作为发送者运行
  • 一种新的服务,它将保持业务逻辑,并作为一个工人和一个分销商,处理每个输入id或分发id 解决方案1对我来说很有意义,但使用它意味着分销商将承担2项责任:

  • 选择ID
  • 将ID分发给工人
  • 但我不确定这是否可能,甚至可能是反模式,当我查看NSB文档中的ScaleOut示例时

    在再次阅读文档和ScaleOut示例之后,我认为我应该选择解决方案3,但我还不太确定

    我试图通过扩展NSB分发服务器来解决管道问题,我更愿意自己托管,而不是使用NServiceBus.Host.exe,但这不是严格的要求

    编辑: 我最终使用了解决方案3,因为它的优点是(在我看来)配置队列的任务比解决方案2中的任务要小,如果您使用默认队列命名的话


    亲切问候

    我们在过去的版本中使用解决方案2完成了这项工作。原因是,我们让分销商站在旁边,高度可用。在未来,我们很可能会让分销商做一些工作,否则它就会相对闲置。这个解决方案对我们很有帮助。

    事实上,我今天刚刚实施了解决方案3。在我看来,如果使用默认队列命名,那么配置队列的任务比解决方案2中的任务要小。