问题标签 [nservicebus-distributor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1096 浏览

workflow - 带有分销商的 NServiceBus 管道

我正在使用 NServiceBus 构建一个处理管道,但我在配置分发服务器时遇到了问题,以便使流程中的每个步骤都具有可扩展性。这里有一些信息:

  • 管道将有一个主进程,对 WorkItem 说“好的,该开始了”,然后它将启动一个类似流程图的进程。
  • 流程图中的每个步骤都可能在计算上很昂贵,因此我希望能够扩展每个步骤。这告诉我每个步骤都需要一个 Distributor。
  • 我希望以后能够将其他活动与事件挂钩。这告诉我完成后我需要 Publish() 消息,而不是 Send() 它们。
  • 流程可能需要根据条件进行分支。这告诉我一个进程必须能够发布不止一种类型的消息。
  • 一个进程可能需要加入分叉。我想我应该为此使用 Sagas。

希望这些假设是好的,否则我遇到的麻烦比我想象的要多。

为了简单起见,让我们忘记分叉或加入,考虑一个简单的管道,步骤 A 后跟步骤 B,并以步骤 C 结束。每个步骤都有自己的分发器,并且可以有许多节点处理消息。

  • NodeA worker 包含一个 IHandleMessages 处理器,并发布 EventA
  • NodeB worker 包含一个 IHandleMessages 处理器,并发布 Event B
  • NodeC worker 包含一个 IHandleMessages 处理器,然后管道就完成了。

以下是配置文件的相关部分,其中#表示worker的数量,(即有输入队列NodeA.1和NodeA.2):

以下是分销商配置的相关部分:

我正在使用每个节点的 2 个实例进行测试,问题似乎出现在节点 B 的中间。基本上可能发生两件事:

  1. Node B 的两个实例都报告它正在订阅 EventA,并且 NodeC.Distrib.Data@MYCOMPUTER 正在订阅 Node B 发布的 EventB。在这种情况下,一切都很好。
  2. Node B 的两个实例都报告它正在订阅 EventA,但是,一个工作人员说 NodeC.Distrib.Data@MYCOMPUTER 正在订阅 TWICE,而另一个工作人员没有提到它。

在第二种情况下,它似乎只受分发者路由订阅消息的方式控制,如果“overachiever”节点处理一个 EventA,那么一切都很好。如果“成绩不佳者”处理 EventA,则 EventB 的发布没有订阅者并且工作流终止。

所以,我的问题:

  1. 这种设置可以吗?
  2. 配置是否正确?除了简单的一级发布者/2-worker 设置之外,很难找到任何关于分发者的配置示例。
  3. 让一个中央代理进程来执行所有非计算密集型的交通警察操作,并且仅在任务长时间运行且必须进行负载平衡时才将消息发送到分发器后面的进程是否更有意义?
    • 然后负载平衡的节点可以简单地回复中央代理,这似乎更容易。
    • 另一方面,这似乎与 NServiceBus 的权力下放不符。
    • 如果这是答案,并且长时间运行的流程的 done 事件是一个回复,那么您如何保留 Publish 以启用以后对已发布事件的可扩展性?
0 投票
1 回答
470 浏览

nservicebus - 如何让负载均衡的 Web 服务使用 nservicebus 向多个订阅者发送消息?

我有负载平衡的 Web 服务器,它使用现有的代码库在用户登录网站时进行处理。我想向任何订阅说“嘿 x 登录”的应用程序发送广播消息?许多 Web 服务器和订阅的应用程序也是如此。

发现工作/配置如何与 nservicebus 一起工作?每个应用程序是否应该知道每个 Web 服务器并单独订阅,或者这是分发器进来的地方,所以 Web 服务器都发送到 1 个分发器,所有应用程序都订阅单个分发器,分发器中继消息?

我试图研究这个,但遇到了麻烦。

谢谢

先生

0 投票
2 回答
3166 浏览

c# - NServiceBus 发布/订阅

我们正在尝试找到一种优雅的解决方案,用于报告从我们的基础架构中的系统生成的异常,该解决方案比查看电子邮件或检查日志文件更易于操作。跨服务总线的发布/订阅模型可以很好地解决这个问题。服务将发布错误/事件,订阅者可以使用简单的模式匹配过滤这些消息。

我们一直在研究 NServiceBus 项目,想知道它是否能满足我们的要求,查看 PubSub 示例 ( http://docs.particular.net/samples/pubsub/ ) 我们注意到它没有解决以下两种情况:

  1. 所有发布者发布相同的消息类型
  2. 订阅者不应要求了解发布者端点

我们已经设法实现了这些要求,但我们不确定配置是否正确。以下是我们的解决方案:

  1. 所有发布者共享相同的订阅存储配置 (DBSubscriptionStorage),这是一个共享数据库,如文档http://docs.particular.net/nservicebus/messaging/publish-subscribe/的订阅存储部分中所述

  2. 所有发布者/订阅者都配置为使用 nservicebus 网站上的文档中描述的分发者。

我们想知道这是否是 NServiceBus 发布/订阅模型的正确实现,或者是否有其他解决方案可以实现我们的目标?

0 投票
1 回答
214 浏览

nservicebus - nservicebus,服务器将消息发送回分销商?


我在我的项目中使用 nservicebus 1.9 版本。我的项目我们正在使用发布者 - 订阅者模型。就像发布者将向分发者发送消息一样,分发者会将相同的消息转发给订阅的订阅者之一。

但在我的项目中,订阅者会做一些操作并将数据插入数据库,

我的要求是,如果订阅者未能将数据插入数据库,我需要将其发送回分销商。我该怎么做?订阅者可以将消息发送回分发者吗?


nRk

0 投票
1 回答
168 浏览

nservicebus - nservicebus 订阅者无法取消订阅者


,我在我的项目中使用 NServiceBus 1.9 RTM。
我正在使用发布者 - 分发者 - 订阅者模型。
在订阅者中,我使用以下代码订阅

当我想取消订阅时,我正在做

但它不是取消订阅,也不是抛出任何错误。在取消订阅后,EventHandler 仍然接收来自分发者的消息。

有什么我想念的吗...?任何人都可以帮助我。


nRk

0 投票
1 回答
224 浏览

nservicebus - 具有 NServiceBus 的横向扩展订阅者的横向扩展发布

我正在尝试使用 EDA 和 NServiceBus 解耦两个应用程序。目前,我有一个销售 MT 和一个库存 MT。每当通过销售 MT 请求销售时,在批准之前,销售 MT 将调用库存 MT 以确保有可用库存。我想改变它的工作方式,以便销售 MT 自动批准它,并发布一个异步“SaleCreated”事件,然后库存 MT 和计费 MT 将订阅该事件。如果有任何缺货商品,库存 MT 可以在离线过程中标记销售。

我的问题是我有 10 个 Sales MT 实例、5 个 Inventory MT 实例和 3 个 Billing MT 实例。所有 3 个应用程序在位于 10/5/3 服务器前面的 LoadBalancer 之上都有自己的虚拟 IP。所以基本上我有 1 个虚拟出版物(SaleCreated 事件)和 2 个虚拟订阅(库存和计费订阅者)。理想情况下,由销售 MT 处理的销售应该创建一个 SaleCreated 事件消息以发送到 1 个且仅 1 个库存 MT,以及 1 个且仅一个计费 MT。我真的很困惑这将如何工作,因为我还没有在 NServiceBus 站点上看到这种情况的示例。此外,我不希望每个订阅都将所有消息发送到单个分发器,因为这会导致一台机器成为瓶颈。

有没有办法做到这一点?

0 投票
1 回答
384 浏览

nservicebus - 阻止分发者向已终止的工作人员发布消息

我对 NServiceBus 分销商有一个小问题,这可能是我自己的无知,但这就是正在发生的事情 -

我有 -
一个。2 个工人(服务器)进程在 2 台机器上运行
b. 1 Distributor 进程向工人发布消息
c. 1 客户端进程向分发者发布消息

现在一切正常,当所有服务器都启动并运行时。

比如说,我现在关闭了 Worker 进程 #1,这样只有 Worker 进程 #2 正在运行。我现在等待一段时间,然后开始向分发者发布消息,我注意到总是有一些消息最终排队到工作进程#1(被关闭的进程)。

现在我想这是因为在关闭服务器之前已经向分发者指示它已准备好并且分发者正在响应这些控制消息。

我的问题是,有没有办法优雅地关闭连接到分配器的工作人员,通知它不应再向其排队。

谢谢。

0 投票
2 回答
628 浏览

nservicebus - NService Bus:细节部署问题

请在来自横向扩展发布者(使用 DB 订阅存储)的多个发布和具有横向扩展订阅者(使用分发者)的多个订阅的上下文中考虑以下问题,其中使用自动 MSI 的初始部署、升级等定期进行安装和卸载.

  1. 使用 DB 订阅存储,如果 DB 出现故障会怎样?如果需要访问订阅数据库才能发布消息,它将如何传递?它会迷路吗?对 Bus.Publish 的调用会引发异常吗?
  2. 假设您不需要停机部署:如果您想将特定发布的订阅数据库移动到不同的服务器怎么办?你如何管理这样的过渡?
  3. 同样的问题也适用于订阅方的分销商:如果您想移动分销商端点怎么办?我能想到的一种情况是,如果您有多个订阅使用单个分发服务器,那么如果您想将其中一些订阅移动到另一个分发服务器以减少负载可能会很困难。
  4. 对于这样的设置(最初和持续升级),安装/卸载场景会是什么样子?似乎您需要一些特殊的安装/卸载脚本来部署“逻辑发布”和订阅数据库,以及“逻辑订阅”和分发者。发布者实例不需要任何特殊的安装/卸载逻辑(因为它们只是使用配置的订阅数据库开始发布消息,然后在卸载时停止)。除了分发者端点的正确配置之外,订阅者工作节点在安装时不需要任何特殊的东西,但需要卸载逻辑以确保将它们从工作节点的分发者列表中删除。
0 投票
1 回答
643 浏览

nservicebus - NServiceBus:负载均衡订阅者

是否可以在不使用分发服务器的情况下对我的订阅者工作节点进行负载平衡?这就是我的想法:

与其让我的分发者订阅一个发布,并让每个工作节点“报告职责”来处理消息,不如我只是将每个工作节点放在一个虚拟 IP 后面,并将这个虚拟 IP 订阅到发布呢?您可以将 MSMQ 消息发送到虚拟 IP 后面的机器吗?

0 投票
1 回答
2382 浏览

nservicebus - NServiceBus:使用 NServiceBus Distributor 的优缺点

我正在考虑使用网络负载均衡器在我的订阅者实例之间负载均衡消息,而不是使用 NServiceBus 分发器(据我所知,它基本上只是一个软件负载均衡器)。每个订阅者实例都将有一个同名的队列用于传递消息,并且将有一个虚拟 IP 在订阅者之间循环。发布者只会知道虚拟 IP 和队列名称。

以下是我理解的这样做的利弊:

  1. 优点
    • 无需安装 NServiceBus Distributor
    • 当我们向外扩展时,需要管理/更新的事情少了(我们已经使用 F5 对这些机器进行负载平衡,而且我们的数据中心购买者对此了如指掌)
    • 少一个故障点(是的,NLB 可能会失败,但让我们面对现实吧,F5 将比在 Windows 上运行的 NServiceBus Distributor 稳定得多)
    • 无需集群服务器即可拥有我们的集群 MSMQ。2 台服务器比在 F5 中添加另一个 VIP 要贵得多。
  2. 缺点
    • NServiceBus Distributor 允许您更轻松地查看消息的积压,因为您可以监控 Distributor 上的单个队列。这使您很容易知道何时应该添加更多工作节点。
    • NServiceBus Distributor 在控制工作线程的数量等方面更聪明。比 NLB 给你更多的控制?(不确定这个)

我是否准确地捕捉到了这一点?我知道建议使用 NServiceBus Distributor,并且在反对该建议之前,我想了解更多原因。