远程处理时 Service Fabric 上的重复请求
Posted
技术标签:
【中文标题】远程处理时 Service Fabric 上的重复请求【英文标题】:Duplicate Requests on Service Fabric When Remoting 【发布时间】:2018-12-06 22:54:00 【问题描述】:我在 Service Fabric (ASP.NET Core) 上有一个无状态服务,它将调用一个 Actor,并且根据场景,Actor 可能在内部也调用其他 Actor 和/或有状态服务。
我的问题是,由于系统的远程处理方面,我们是否需要考虑重复请求?
在我们早期的 Akka.Net 实现中,由于 TCP/IP 网络拥塞等原因,Actor 有可能收到重复的请求,我们通过给每条消息一个唯一的 Correlation Id 来处理这种情况。我们会将请求及其结果以状态存储在参与者上,如果再次返回相同的关联 ID,我们将假设它是重复的并发送较早的结果,而不是重新处理请求。
我曾在微软的一个示例项目中看到过类似的方法,但我似乎再也找不到了(Github 上的死链接)。
有谁知道这是否需要在 Actor 和/或有状态服务中处理?
【问题讨论】:
【参考方案1】:您可以在远程调用中添加custom headers,方法是创建IServiceRemotingClientFactory
和IServiceRemotingClient
的自定义实现。
在操作RequestResponseAsync
和SendOneWay
中添加自定义标头。
Peter Bons 的另一个例子here.:
var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());
在接收端,您可以在自定义ActorServiceRemotingDispatcher
中从IServiceRemotingRequestMessageHeader
获取自定义标头。
【讨论】:
这是一个非常有趣的方法。如果我有任何问题,我将对此进行审查并回复您。谢谢!以上是关于远程处理时 Service Fabric 上的重复请求的主要内容,如果未能解决你的问题,请参考以下文章
Service Fabric 对无状态服务的远程调用未返回、卡住
如何为远程 Service Fabric 集群创建 Actor 代理
Service Fabric Api Gateway 上的 Application Insights 端到端中断
Azure上的Service Fabric Cluster创建失败,错误代码为“VMInstanceCountAllowsBetterReliabilityLevel”