2013-03-06 29 views
3

我们有1个服务从数据库中选择som id's,然后用一些buisness逻辑按顺序处理它们。我们想要扩展并且并行执行的处理,而不会创建大量内部线程。NServiceBus经销商 - 如何拆分应用程序

我的问题是:

如果我想使用经销商向外扩展,应该如何以及我该怎么办呢?

解决方案1: 服务被分成2:

  1. 原来的服务被修改为只从数据库中选择的ID,然后将它们发送给工人。这将是分销商(RunDistributorWithNoWorkerOnItsEndpoint)。
  2. 一种新的服务,将作为一名工人来处理商业逻辑和功能,处理每一个无聊的身份证件。如果我想要更多的工人,我简单地多次启动相同的过程。

解决方案2: 该服务被分成3:

  1. 原始服务被修改,以只从数据库中选择的ID,然后将它们发送到所述分配器。
  2. 一种新服务,分发者(RunDistributorWithNoWorkerOnItsEndpoint),它只处理负载均衡给worker。
  3. 一个新的服务,工人,将持有buisness逻辑和处理每一个编号。

解决方案3: 该服务被分成2:

  1. 原始服务被修改,以只从数据库中选择的ID,然后将其发送。作为发件人运行。
  2. 一种新的服务,将作为工作人员和分销商持有商业逻辑和功能,处理每个编号或分发它们。

解决方案1使得很多的意义,我,但使用那岂不是莫名其妙的经销商将有2个responsabilities:

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

但我不知道这是可能的,甚至可能是反模式,当我从NSB文档查看ScaleOut示例。

解决方案3是我相信我应该去阅读文档和ScaleOut示例againg但我还不太确定。

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

编辑: 我结束了使用的解决方案3中它的优点(在我看来),在配置队列的任务比在溶液中2小,如果你是使用默认队列命名。

亲切的问候

回答

1

我们使用的解决方案2.做到了这一点,在过去版本的原因是在于我们做分销商一起和高度可用的立场。在未来,我们很可能会让分销商做一些工作,否则就会坐得相对闲置。这个解决方案对我们很有帮助。

+0

我实际上刚刚实施了解决方案3今天。它有一个优点(在我看来),如果使用默认队列命名,配置队列的任务比解决方案2中的要小。 – 2013-03-08 21:17:08