具有完成任务的服务结构任务队列
Service fabric task queue with completion task
我的工作可以分解成更小的任务,每个任务最多可能需要 30 分钟才能完成。任务完成后,清理任务必须是运行。
每个任务都是 CPU 密集型操作,必须 运行 在单独的机器上进行。
问题是我找不到知道所有任务何时完成的方法。如何在 Service Fabric 中创建一个应用程序,以便在所有任务完成后,可以 运行 进行额外的清理任务?
另外,如何让任何任务失败或意外关闭时,向所有工作人员发送取消信号,然后调用清理任务?
考虑为此使用事件驱动(或pub/sub)方法。
'start-task' 可以通知期望有多少个子任务。每个完成的任务都可以触发一个事件。清理任务可以等待开始事件和所有完成事件。清理后,如果需要,它可以自己通知侦听器。
以类似的方式,事件可以包含有关进度、失败和取消的信息。
您也可以根据需要使用 ServiceFabric Actors。
- 创建一个中央 "JobService" 被触发来完成工作(例如托管 WebApi 的无状态服务)
- 创建一个 "TaskActor" 来处理单个任务
- 在 ActorInterface 中发布一个 cancellationToken
- 在您的 "JobService" 中,为每个任务指定一个唯一的 ID 并将其用作 "ActorId"
- 在您的 "JobService" 中,等待参与者完成任务并在所有任务完成后触发清理。如果其中一个演员抛出异常,您也可以取消其他演员。
您可以查看分区概念,了解参与者如何分布在您的节点上。
根据您的场景,actorId 可以是一致的(例如 taskActor1、taskActor2)以重用资源,或者您可以使用 guid 使它们对于每个作业都是唯一的。
我的工作可以分解成更小的任务,每个任务最多可能需要 30 分钟才能完成。任务完成后,清理任务必须是运行。
每个任务都是 CPU 密集型操作,必须 运行 在单独的机器上进行。
问题是我找不到知道所有任务何时完成的方法。如何在 Service Fabric 中创建一个应用程序,以便在所有任务完成后,可以 运行 进行额外的清理任务?
另外,如何让任何任务失败或意外关闭时,向所有工作人员发送取消信号,然后调用清理任务?
考虑为此使用事件驱动(或pub/sub)方法。
'start-task' 可以通知期望有多少个子任务。每个完成的任务都可以触发一个事件。清理任务可以等待开始事件和所有完成事件。清理后,如果需要,它可以自己通知侦听器。
以类似的方式,事件可以包含有关进度、失败和取消的信息。
您也可以根据需要使用 ServiceFabric Actors。
- 创建一个中央 "JobService" 被触发来完成工作(例如托管 WebApi 的无状态服务)
- 创建一个 "TaskActor" 来处理单个任务
- 在 ActorInterface 中发布一个 cancellationToken
- 在您的 "JobService" 中,为每个任务指定一个唯一的 ID 并将其用作 "ActorId"
- 在您的 "JobService" 中,等待参与者完成任务并在所有任务完成后触发清理。如果其中一个演员抛出异常,您也可以取消其他演员。
您可以查看分区概念,了解参与者如何分布在您的节点上。
根据您的场景,actorId 可以是一致的(例如 taskActor1、taskActor2)以重用资源,或者您可以使用 guid 使它们对于每个作业都是唯一的。