azure - 远程处理时 Service Fabric 上的重复请求
问题描述
我在 Service Fabric (ASP.NET Core) 上有一个无状态服务,它将调用一个 Actor,并且 Actor 可能在内部也可以根据场景调用其他 Actor 和/或有状态服务。
我的问题是,由于系统的远程处理方面,我们是否需要考虑重复请求?
在我们早期的 Akka.Net 实现中,由于 TCP/IP 网络拥塞等原因,Actor 有可能收到重复的请求,我们通过给每条消息一个唯一的 Correlation Id 来处理这个问题。我们会将请求及其结果以状态存储在参与者上,如果再次返回相同的关联 id,我们将假设它是重复的并发送较早的结果,而不是重新处理请求。
我曾在 Microsoft 的一个示例项目中看到过类似的方法,但我似乎再也找不到了(Github 上的死链接)。
有谁知道这是否需要在 Actor 和/或有状态服务中处理?
解决方案
您可以通过创建 和 的自定义实现,在远程调用中添加自定义标头。IServiceRemotingClientFactory
IServiceRemotingClient
在操作RequestResponseAsync
和SendOneWay
.
Peter Bons在这里的另一个例子:
var header = requestRequestMessage.GetHeader();
var customHeaders = customHeadersProvider.Invoke() ?? new CustomHeaders();
header.AddHeader(CustomHeaders.CustomHeader, customHeaders.Serialize());
在接收方,您可以从 custom 中获取自定义标IServiceRemotingRequestMessageHeader
头ActorServiceRemotingDispatcher
。
推荐阅读
- scala - Akka Streams 源映射中从未达到的功能
- sql - SQL - 计算自分区中最早日期以来的小时数
- sql-server - T-SQL 计算时间窗口中的事件数
- ios - 使用谷歌登录后如何从应用程序委托执行转场
- drupal - 通过用户名以编程方式更改用户密码
- css - 如何停止和项目溢出 CSS 网格列?
- java - 仅从 HttpServletRequest 获取 URI
- sql - 从 PostgreSQL 到 SQL Server 的带布尔值的案例表达式
- mysql - 在 SQL 中将季度日期转换为月末日期
- sql - 查询 Postgresql 数据库以验证单词顺序