首页 > 解决方案 > 远程处理时 Service Fabric 上的重复请求

问题描述

我在 Service Fabric (ASP.NET Core) 上有一个无状态服务,它将调用一个 Actor,并且 Actor 可能在内部也可以根据场景调用其他 Actor 和/或有状态服务。

我的问题是,由于系统的远程处理方面,我们是否需要考虑重复请求?

在我们早期的 Akka.Net 实现中,由于 TCP/IP 网络拥塞等原因,Actor 有可能收到重复的请求,我们通过给每条消息一个唯一的 Correlation Id 来处理这个问题。我们会将请求及其结果以状态存储在参与者上,如果再次返回相同的关联 id,我们将假设它是重复的并发送较早的结果,而不是重新处理请求。

我曾在 Microsoft 的一个示例项目中看到过类似的方法,但我似乎再也找不到了(Github 上的死链接)。

有谁知道这是否需要在 Actor 和/或有状态服务中处理?

标签: azureazure-service-fabricservice-fabric-actor

解决方案


您可以通过创建 和 的自定义实现,在远程调用中添加自定义标头IServiceRemotingClientFactoryIServiceRemotingClient

在操作RequestResponseAsyncSendOneWay.

Peter Bons在这里的另一个例子:

var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());

在接收方,您可以从 custom 中获取自定义标IServiceRemotingRequestMessageHeaderActorServiceRemotingDispatcher


推荐阅读