如何处理 Reliable Actors 或有状态 Reliable Service 中的持久操作和 're-process' 失败状态
How to deal with long-lasting operations in Reliable Actors or stateful Reliable Service and 're-process' failed states
我是 Service Fabric Reliable Actors 技术的新手,正在尝试找出针对此特定场景的最佳实践:
假设我们有一些遗留代码,我们想要 运行 构建在 SF Reliable Actors 上的新代码。某些类型 "ActorExecutor" 的 Actor 将异步调用某些第三方服务,这些服务有时会卡住很长时间,比 Actor 的调用客户端准备等待的时间长,甚至会遇到一些长时间的底层通信问题。我们不希望客户端(遗留代码)被 ActorExecutor 中的任何类型的问题阻塞,它不希望从 actor 接收到任何值或状态。我们应该为此使用 SF ReliableQueue 吗?我们是否应该使用某种 actor-broker 来接收来自客户端的请求并将它们存储到队列中:Client->ActorBroker->ActorExecutor?提醒在这里有帮助吗?
关于这方面的另一个问题:当成千上万的演员可能同时卡在 'third-party incomplete call' 中时,可能会出现这种情况,我们想要重新激活并为他们重复最后一次调用,应该我们为此编写一个新工具?在 NServiceBus 中,您可以在 MSMQ 中创建一个错误队列,其中所有失败的 'unable to process' 消息都无法到达,然后我们可以在未来的任何时候简单地重新处理它们。据我了解,Service Fabric 中没有这样的东西,它需要我们自己构建。
event driven 方法可以帮助您。无需等待 Actor 从服务调用 return,您可以在其上排队一些任务,请求它执行一些操作。调用 Actor 的服务将 自动运行 ,处理其任务队列中的项目。这将允许它执行重试和错误处理。调用成功后,一个新的事件可以通知系统的其余部分。
也许 this 项目可以帮助您入门。
编辑:
我是 Service Fabric Reliable Actors 技术的新手,正在尝试找出针对此特定场景的最佳实践:
假设我们有一些遗留代码,我们想要 运行 构建在 SF Reliable Actors 上的新代码。某些类型 "ActorExecutor" 的 Actor 将异步调用某些第三方服务,这些服务有时会卡住很长时间,比 Actor 的调用客户端准备等待的时间长,甚至会遇到一些长时间的底层通信问题。我们不希望客户端(遗留代码)被 ActorExecutor 中的任何类型的问题阻塞,它不希望从 actor 接收到任何值或状态。我们应该为此使用 SF ReliableQueue 吗?我们是否应该使用某种 actor-broker 来接收来自客户端的请求并将它们存储到队列中:Client->ActorBroker->ActorExecutor?提醒在这里有帮助吗?
关于这方面的另一个问题:当成千上万的演员可能同时卡在 'third-party incomplete call' 中时,可能会出现这种情况,我们想要重新激活并为他们重复最后一次调用,应该我们为此编写一个新工具?在 NServiceBus 中,您可以在 MSMQ 中创建一个错误队列,其中所有失败的 'unable to process' 消息都无法到达,然后我们可以在未来的任何时候简单地重新处理它们。据我了解,Service Fabric 中没有这样的东西,它需要我们自己构建。
event driven 方法可以帮助您。无需等待 Actor 从服务调用 return,您可以在其上排队一些任务,请求它执行一些操作。调用 Actor 的服务将 自动运行 ,处理其任务队列中的项目。这将允许它执行重试和错误处理。调用成功后,一个新的事件可以通知系统的其余部分。
也许 this 项目可以帮助您入门。
编辑: