【问题标题】:How to increase timeout for an Azure Service Fabric Actor?如何增加 Azure Service Fabric Actor 的超时?
【发布时间】:2016-10-31 10:13:52
【问题描述】:

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

Actor Microsoft.ServiceFabric.Actors.Runtime.ActorConcurrencyLock 得到 同一请求不止一次。这可能发生在请求中 比配置的 OperationTimeout 花费更多的处理时间 客户端作为客户端在 TimeoutException 上重试。

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

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

【问题讨论】:

    标签: azure azure-service-fabric


    【解决方案1】:

    我会考虑更改演员的工作方式,即您使用所需的参数初始化和“播种”演员。然后触发一个计时器来执行长时间运行的工作。然后重新查询actor,直到工作完成并检索结果。

    我们有几个长期运行的工作负载,使用我们系统中的演员,我们设置为以这种方式工作

    【讨论】:

    • 我认为从架构的角度来看这是一个很好的建议,我一定会尝试一下。不幸的是,虽然它并没有真正回答这个问题,所以我不能将它标记为答案。是否可以增加超时时间,如果可以,如何增加?
    • 公平地说,我记得曾经读过一些东西,说要更改 FabricTransportSettings,您必须在线路的两端(请求者和接收者的侦听器)上进行更改结束)
    • 我最近也遇到了这个问题。我接受了不增加超时的建议,而是触发了一个actor并为长时间运行的任务设置了一个计时器,然后使用可以从调用服务订阅的基于actor的事件来接收工作完成时的通知。你可以阅读更多关于演员事件@docs.microsoft.com/en-us/azure/service-fabric/…
    【解决方案2】:

    您可以在程序集级别设置超时值。

    using Microsoft.ServiceFabric.Services.Remoting.FabricTransport;
    [assembly: FabricTransportServiceRemotingProvider(MaxMessageSize = int.MaxValue,OperationTimeoutInSeconds =2000)]
    

    【讨论】:

      【解决方案3】:

      也许您应该考虑将以下部分放入您的 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

      【讨论】:

        猜你喜欢
        • 2017-07-19
        • 1970-01-01
        • 2016-09-19
        • 2016-11-07
        • 2017-07-14
        • 2016-11-08
        • 2018-09-16
        • 2016-03-11
        • 2018-01-11
        相关资源
        最近更新 更多