【发布时间】:2013-03-06 19:08:28
【问题描述】:
我们有 1 个服务,它从数据库中选择 som id,然后按顺序使用一些业务逻辑处理它们。我们希望横向扩展并并行执行的处理,而不创建大量内部线程。
我的问题是:
如果我想使用 Distributor 进行横向扩展,我应该如何以及如何做到这一点?
解决方案 1: 服务分为2:
- 原来的服务被修改为只从数据库中选择id,然后发送给worker。这将是分发者 (RunDistributorWithNoWorkerOnItsEndpoint)。
- 一个新的服务,它将保存业务逻辑并作为工作人员处理每个传入的 id。如果我想要更多的工人,我只需多次启动相同的流程。
解决方案 2: 服务分为3个:
- 将原来的服务修改为只从数据库中选择id,然后发送给distributor。
- 一个新服务,分发器 (RunDistributorWithNoWorkerOnItsEndpoint),它只处理工作人员的负载平衡。
- 一个新的服务,worker(s),它将保存业务逻辑并处理每个传入的 id。
解决方案 3: 服务分为2:
- 原来的服务被修改为只从数据库中选择id然后发送。作为发件人运行。
- 一种新的服务,它将保存业务逻辑并充当工作人员和分发者,处理每个传入的 id 或分发它们。
解决方案 1 对我来说很有意义,但使用它意味着分销商将有 2 个责任:
- 选择 ID。
- 将 ID 分发给工作人员。
但是当我查看 NSB 文档中的 ScaleOut 示例时,我不确定这是否可能,甚至可能是反模式。
在再次阅读文档和 ScaleOut 示例之后,我认为我应该采用解决方案 3,但我还不太确定。
我试图通过与 NSB 分销商进行横向扩展来解决管道问题,并且我更愿意自己进行托管,而不是使用 NServiceBus.Host.exe,但这不是严格的要求。
编辑: 我最终使用了解决方案 3,因为如果您使用默认队列命名,它的优势(在我看来)配置队列的任务比解决方案 2 中的要小。
亲切的问候
【问题讨论】:
标签: nservicebus nservicebus-distributor