Azure 远程处理时服务结构上的重复请求

Azure 远程处理时服务结构上的重复请求,azure,azure-service-fabric,service-fabric-actor,Azure,Azure Service Fabric,Service Fabric Actor,我在服务结构(ASP.NET Core)上有一个无状态服务,它将调用一个参与者,参与者也可以根据场景在内部调用其他参与者和/或有状态服务 我的问题是,我们是否需要考虑由于系统的远程处理方面而产生的重复请求 在我们早期的Akka.Net实现中,由于TCP/IP网络拥塞等原因,参与者有可能收到重复的请求,我们通过给每条消息一个唯一的关联Id来处理。我们将在参与者上以状态存储请求及其结果,如果相同的关联Id再次返回,我们只会假设它是一个副本,并发送较早的结果,而不是重新处理请求 我曾在微软的一个示例项

我在服务结构(ASP.NET Core)上有一个无状态服务,它将调用一个参与者,参与者也可以根据场景在内部调用其他参与者和/或有状态服务

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

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

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

有人知道这是否需要在Actor和/或Stateful服务中处理吗?

您可以通过创建
IServiceRemotingClientFactory
IServiceRemotingClient
的自定义实现来添加远程处理调用

在操作
RequestResponseAsync
SendOneWay
中添加自定义头

彼得·邦斯的另一个例子:


在接收端,您可以从自定义
ActorServiceRemotingDispatcher
中的
IServiceRemotingRequestMessageHeader
获取自定义头。这是一种非常有趣的方法。我会检查一下,如果有任何问题,我会回复你。非常感谢。
var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());