NServiceBus分销商 - 如何拆分应用程序

时间:2013-03-06 19:08:28

标签: nservicebus nservicebus-distributor

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

我的问题是:

如果我想使用经销商进行扩展,我该怎么做以及如何做?

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

  1. 原始服务被修改为仅从数据库中选择ID,然后将它们发送给工作人员。这将是分发者(RunDistributorWithNoWorkerOnItsEndpoint)。
  2. 一种新服务,它将作为工人保持商业逻辑和功能,处理每个进入的id。如果我想要更多工人,我可以多次简单地启动相同的流程。
  3. 解决方案2: 该服务分为3:

    1. 原始服务被修改为仅从数据库中选择ID,然后将其发送给分发服务器。
    2. 新服务,即分发服务器(RunDistributorWithNoWorkerOnItsEndpoint),仅处理对工作人员的负载平衡。
    3. 一个新的服务,工人,它将保持商业逻辑并处理每个进入的身份。
    4. 解决方案3: 该服务分为2:

      1. 原始服务被修改为仅从数据库中选择ID然后发送它们。作为发件人运行。
      2. 一种新服务,它将作为工作人员和经销商保持商业逻辑和功能,处理每个incomming id或分发它们。
      3. 解决方案1对我来说很有意义,但使用它会意味着分销商会有两种责任:

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

          解决方案3是我认为我应该去的,在阅读了文档和ScaleOut示例之后,但我还不太确定。

          我试图通过扩展NSB分销商来解决管道问题,我宁愿做自己的托管,而不是使用NServiceBus.Host.exe,但这不是一个严格的要求。

          修改 我最终使用解决方案3,因为它具有(在我看来)配置队列的任务小于解决方案2的任务,如果您使用默认队列命名。

          亲切的问候

1 个答案:

答案 0 :(得分:1)

我们在过去的版本中使用解决方案2完成了这个。原因是我们使经销商站在一起并且高度可用。在未来,我们很可能让经销商做一些工作,否则它将只是相对空闲。这个解决方案很适合我们。