NServicebus-停止长时间运行的进程?

NServicebus-停止长时间运行的进程?,nservicebus,Nservicebus,下面是我尝试使用NServiceBus组装的应用程序: 我有1000个文件需要由服务处理。到目前为止,我认为我应该有一个端点,客户端,找到所有这些文件,并将它们发送到总线上进行处理 我的另一个端点,即进行处理的服务器,将在处理文件时侦听这些客户端消息,并返回结果 客户端获取结果,将文件标记为已处理,并等待处理下一个999个文件。客户机不关心返回的消息的顺序,只要它们在某个时刻都得到了处理。(事实上,在处理数据之后,客户端将对数据做一些服务器无法完成的事情,因此我不能只是触发并忘记处理请求。)

下面是我尝试使用NServiceBus组装的应用程序:

  • 我有1000个文件需要由服务处理。到目前为止,我认为我应该有一个端点,客户端,找到所有这些文件,并将它们发送到总线上进行处理
  • 我的另一个端点,即进行处理的服务器,将在处理文件时侦听这些客户端消息,并返回结果
  • 客户端获取结果,将文件标记为已处理,并等待处理下一个999个文件。客户机不关心返回的消息的顺序,只要它们在某个时刻都得到了处理。(事实上,在处理数据之后,客户端将对数据做一些服务器无法完成的事情,因此我不能只是触发并忘记处理请求。)
  • 由于处理一条消息可能需要一个多小时,我将扩展应用程序,使多个服务器都试图处理需要处理的1000个文件
从概念上讲,它就像构建一个个人SETI家庭服务,在我所有的服务器上运行

我遇到的问题是,如何在处理1000个文件的中途停止

  • 我想让我的所有服务器尽可能多地处理我的数据,所以当客户端启动时,它是否会发布1000条命令供1000个文件处理,然后坐等?如果它这样做了,并决定停止,它如何清除总线上所有用于处理文件的命令
  • 如果我的客户机一次只在总线上推送一到两条消息,那么如果我决定在客户机上停止,我可以很容易地停止发送消息,但是我还有两个问题

  • 服务器可能没有得到充分利用,我最终会得到空闲的服务器
  • 如何停止加载和处理数据的服务器?向他们发送另一个不同消息格式的命令

想法,想法?我是否使用正确的工具/方法来解决这个问题?

您可能需要考虑的一件事是如何关联消息处理。我将使用一个saga来实现这一点,并让客户机生成某种批处理id,该id附加到所有要处理的文件中。这使您的客户端能够向saga发送CancelProcessing消息,然后处理程序可以停止处理/向文件处理端点发送消息,并执行任何清理操作,例如完成saga和从数据库中删除数据

因此,您将拥有客户端端点、saga端点和一个或多个文件处理端点(位于分发服务器后面)。您的客户将负责启动/发送文件到传奇。saga管理文件关联和处理活动,而处理端点则专注于完成这项工作

请记住,处理端点不一定必须是物理端点。如果需要,可以在一台服务器上安装多个节点,并使用监视工具确定是否需要添加或删除节点