如何增加Azure Service Fabric Actor的超时?

时间:2016-06-28 22:12:33

标签: azure azure-service-fabric

我在错误日志中发现,我们的Azure Service Fabric无状态服务在一段时间后尝试在Actor代理上调用方法时遇到Microsoft.ServiceFabric.Actors.Runtime.DuplicateMessageException。演员可能需要一段时间才能运行。该例外的完整信息是:

  

演员Microsoft.ServiceFabric.Actors.Runtime.ActorConcurrencyLock得到了   同一个请求不止一次。这可能发生在请求中   比配置的OperationTimeout开启需要更多的处理时间   客户端作为客户端在TimeoutException上重试。

我没有看到任何可以配置此值的地方。我在the documentation for the FabricTransportSettings class中看到了对它的引用,但我不知道该类型的使用位置。

由于我们的actor方法需要一段时间才能运行(通常是几分钟),如果此错误确实与超时有关,我该如何增加OperationTimeout?

3 个答案:

答案 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>

来源:https://docs.microsoft.com/en-us/azure/service-fabric/service-fabric-reliable-actors-fabrictransportsettings