【问题标题】:NServiceBus Distributor - How to split applicationNServiceBus Distributor - 如何拆分应用程序
【发布时间】:2013-03-06 19:08:28
【问题描述】:

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

我的问题是:

如果我想使用 Distributor 进行横向扩展,我应该如何以及如何做到这一点?

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

  1. 原来的服务被修改为只从数据库中选择id,然后发送给worker。这将是分发者 (RunDistributorWithNoWorkerOnItsEndpoint)。
  2. 一个新的服务,它将保存业务逻辑并作为工作人员处理每个传入的 id。如果我想要更多的工人,我只需多次启动相同的流程。

解决方案 2: 服务分为3个:

  1. 将原来的服务修改为只从数据库中选择id,然后发送给distributor。
  2. 一个新服务,分发器 (RunDistributorWithNoWorkerOnItsEndpoint),它只处理工作人员的负载平衡。
  3. 一个新的服务,worker(s),它将保存业务逻辑并处理每个传入的 id。

解决方案 3: 服务分为2:

  1. 原来的服务被修改为只从数据库中选择id然后发送。作为发件人运行。
  2. 一种新的服务,它将保存业务逻辑并充当工作人员和分发者,处理每个传入的 id 或分发它们。

解决方案 1 对我来说很有意义,但使用它意味着分销商将有 2 个责任:

  1. 选择 ID。
  2. 将 ID 分发给工作人员。

但是当我查看 NSB 文档中的 ScaleOut 示例时,我不确定这是否可能,甚至可能是反模式。

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

我试图通过与 NSB 分销商进行横向扩展来解决管道问题,并且我更愿意自己进行托管,而不是使用 NServiceBus.Host.exe,但这不是严格的要求。

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

亲切的问候

【问题讨论】:

    标签: nservicebus nservicebus-distributor


    【解决方案1】:

    在过去的版本中,我们使用解决方案 2 完成了此操作。原因是我们使分发器保持一致且高度可用。将来我们很可能会让 Distributor 做一些工作,否则它只会相对闲置。这个解决方案对我们很有帮助。

    【讨论】:

    • 我今天实际上刚刚实施了解决方案 3。如果使用默认队列命名,它的优点(在我看来)是配置队列的任务比解决方案 2 中的要小。
    猜你喜欢
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    相关资源
    最近更新 更多