Azure service fabric 如何在可靠的参与者或有状态的可靠服务和'中处理长期运营;重新处理';失败国家

Azure service fabric 如何在可靠的参与者或有状态的可靠服务和'中处理长期运营;重新处理';失败国家,azure-service-fabric,Azure Service Fabric,我不熟悉Fabric Reliable Actors技术,并尝试找出此特定场景的最佳实践: 假设我们有一些遗留代码,我们希望运行基于SF可靠参与者的新代码。某些类型的“ActorExecutor”的参与者将异步调用某些第三方服务,这些服务有时可能会停滞相当长的时间,比参与者的调用客户端准备等待的时间还要长,甚至会遇到一些长时间的下属通信问题。我们不希望客户端(遗留代码)被ActorExecutor中的任何类型的问题阻止,它不希望从actor收到任何值或状态。我们应该使用SF ReliableQu

我不熟悉Fabric Reliable Actors技术,并尝试找出此特定场景的最佳实践:

假设我们有一些遗留代码,我们希望运行基于SF可靠参与者的新代码。某些类型的“ActorExecutor”的参与者将异步调用某些第三方服务,这些服务有时可能会停滞相当长的时间,比参与者的调用客户端准备等待的时间还要长,甚至会遇到一些长时间的下属通信问题。我们不希望客户端(遗留代码)被ActorExecutor中的任何类型的问题阻止,它不希望从actor收到任何值或状态。我们应该使用SF ReliableQueue吗?我们是否应该使用某种类型的actor代理来接收来自客户端的请求并将它们存储到队列:client->ActorBroker->ActorExecutor?提醒在这里有用吗

在这方面还有一个问题:当成千上万的参与者可能同时陷入“第三方不完整呼叫”时,我们有可能为他们重新激活并重复最后一次呼叫,我们是否应该为此编写新的工具?在NServiceBus中,您可以在MSMQ中创建一个错误队列,在该队列中,所有失败的消息(如“无法处理”待登陆的消息)都会出现,然后我们可以在将来的任何时候简单地重新处理它们。据我所知,在服务结构中没有这样的东西,我们需要自己构建它。

一种方法可以帮助您。不必等待参与者从对服务的调用返回,您可以将某个任务排队,请求它执行某个操作。服务调用参与者将自动运行,处理其任务队列中的项目。这将允许它执行重试和错误处理。成功调用后,新事件可以通知系统的其余部分

也许这个项目可以帮助你们开始

编辑:

  • 在这个时候,我不相信你能在演员中使用可靠的集合。因此,参与者内部的队列是一个常规()集合
  • 使用参与者计时器处理队列。不要使用线程池,因为它不是持久性的,不会在崩溃和Actor垃圾收集中生存

您能否澄清演员的呼叫排队机制?它是应该在ActorExecutor内部或外部实现和存在的东西吗?像SF的可靠队列?然而,actor真的可以使用ReliableQueue吗?我认为它只有一个值字典可供使用,或者你的意思是通过“fire-and-forget”方法调用Actor,所有这些调用都将自动排队到线程池中?那么,在同一时间内,每个参与者可以排队发送多少条消息?此外,据我所知,它们存储在内存中,如果实例失败,则无法恢复