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

时间:2018-06-28 00:11:47

标签: azure azure-service-fabric service-fabric-actor

我在Service Fabric(ASP.NET Core)上有一个无状态服务,该服务将调用一个Actor,并且根据情况,该Actor可能还会在内部调用其他Actor和/或有状态服务。

我的问题是,由于系统具有远程功能,我们是否需要考虑重复的请求?

在我们较早的Akka.Net实施中,由于TCP / IP网络拥塞等原因,Actor可能会收到重复的请求,我们通过为每个消息赋予唯一的相关性ID来进行处理。我们将请求及其结果存储在参与者的状态中,如果再次返回相同的相关ID,我们将假定它是重复的并发送了较早的结果,而不是重新处理请求。

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

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

1 个答案:

答案 0 :(得分:0)

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

在操作RequestResponseAsyncSendOneWay内添加自定义标头。

Peter Bons here的另一个例子。:

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

在接收方,您可以在自定义IServiceRemotingRequestMessageHeader中从ActorServiceRemotingDispatcher获取自定义标头。