我在错误日志中发现,我们的Azure Service Fabric无状态服务在一段时间后尝试在Actor代理上调用方法时遇到Microsoft.ServiceFabric.Actors.Runtime.DuplicateMessageException
。演员可能需要一段时间才能运行。该例外的完整信息是:
演员Microsoft.ServiceFabric.Actors.Runtime.ActorConcurrencyLock得到了 同一个请求不止一次。这可能发生在请求中 比配置的OperationTimeout开启需要更多的处理时间 客户端作为客户端在TimeoutException上重试。
我没有看到任何可以配置此值的地方。我在the documentation for the FabricTransportSettings
class中看到了对它的引用,但我不知道该类型的使用位置。
由于我们的actor方法需要一段时间才能运行(通常是几分钟),如果此错误确实与超时有关,我该如何增加OperationTimeout?
答案 0 :(得分:3)
我会考虑改变演员的工作方式,以便初始化和播放"种子"具有所需参数的actor。然后触发计时器以执行长时间运行的工作。然后重新查询actor直到工作完成并检索结果。
我们有一些长时间运行的工作负载使用我们系统中的actor,我们设置为以这种方式工作
答案 1 :(得分:2)
您可以在装配级别设置超时值。
using Microsoft.ServiceFabric.Services.Remoting.FabricTransport;
[assembly: FabricTransportServiceRemotingProvider(MaxMessageSize = int.MaxValue,OperationTimeoutInSeconds =2000)]
答案 2 :(得分:0)
也许您应该考虑将以下部分放入您的Settings.xml文件中:
<Section Name="TransportSettings">
<Parameter Name="MaxMessageSize" Value="1073741824" />
<Parameter Name="OperationTimeoutInSeconds" Value="6000" />
</Section>