我们有1个服务从数据库中选择som id's,然后用一些buisness逻辑按顺序处理它们。我们想要扩展并且并行执行的处理,而不会创建大量内部线程。NServiceBus经销商 - 如何拆分应用程序
我的问题是:
如果我想使用经销商向外扩展,应该如何以及我该怎么办呢?
解决方案1: 服务被分成2:
- 原来的服务被修改为只从数据库中选择的ID,然后将它们发送给工人。这将是分销商(RunDistributorWithNoWorkerOnItsEndpoint)。
- 一种新的服务,将作为一名工人来处理商业逻辑和功能,处理每一个无聊的身份证件。如果我想要更多的工人,我简单地多次启动相同的过程。
解决方案2: 该服务被分成3:
- 原始服务被修改,以只从数据库中选择的ID,然后将它们发送到所述分配器。
- 一种新服务,分发者(RunDistributorWithNoWorkerOnItsEndpoint),它只处理负载均衡给worker。
- 一个新的服务,工人,将持有buisness逻辑和处理每一个编号。
解决方案3: 该服务被分成2:
- 原始服务被修改,以只从数据库中选择的ID,然后将其发送。作为发件人运行。
- 一种新的服务,将作为工作人员和分销商持有商业逻辑和功能,处理每个编号或分发它们。
解决方案1使得很多的意义,我,但使用那岂不是莫名其妙的经销商将有2个responsabilities:
- 选择IDS。
- 将ID分配给工作人员。
但我不知道这是可能的,甚至可能是反模式,当我从NSB文档查看ScaleOut示例。
解决方案3是我相信我应该去阅读文档和ScaleOut示例againg但我还不太确定。
我试图通过扩大与NSB分销商解决管道问题,我宁愿做我自己的托管,不使用NServiceBus.Host。exe,但这不是一个严格的要求。
编辑: 我结束了使用的解决方案3中它的优点(在我看来),在配置队列的任务比在溶液中2小,如果你是使用默认队列命名。
亲切的问候
我实际上刚刚实施了解决方案3今天。它有一个优点(在我看来),如果使用默认队列命名,配置队列的任务比解决方案2中的要小。 – 2013-03-08 21:17:08