我在Service Fabric(ASP.NET Core)上有一个无状态服务,该服务将调用一个Actor,并且根据情况,该Actor可能还会在内部调用其他Actor和/或有状态服务。
我的问题是,由于系统具有远程功能,我们是否需要考虑重复的请求?
在我们较早的Akka.Net实施中,由于TCP / IP网络拥塞等原因,Actor可能会收到重复的请求,我们通过为每个消息赋予唯一的相关性ID来进行处理。我们将请求及其结果存储在参与者的状态中,如果再次返回相同的相关ID,我们将假定它是重复的并发送了较早的结果,而不是重新处理请求。
我已经在Microsoft拥有的一个示例项目中看到了类似的方法,但是我似乎再也找不到了(Github上的死链接)。
有人知道是否需要在Actor和/或有状态服务中处理吗?
答案 0 :(得分:0)
您可以通过创建IServiceRemotingClientFactory
和IServiceRemotingClient
的自定义实现,在远程调用中添加custom headers。
在操作RequestResponseAsync
和SendOneWay
内添加自定义标头。
Peter Bons here的另一个例子。:
var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());
在接收方,您可以在自定义IServiceRemotingRequestMessageHeader
中从ActorServiceRemotingDispatcher
获取自定义标头。