是否需要重试策略来处理 Service Fabric 内部通信的瞬态故障?

REi*_*ker 2 service azure transient appfabric

我们将 Azure Service Fabric 与可靠服务和参与者、IoTHub 和 Web API 一起使用,目前正在集成“瞬态故障处理”(TFH)来处理服务(远程)通信期间的错误。

对于 Azure 存储和 SQL,它已经实现,我们为此使用内置的重试策略,它工作正常。

但是 Service Fabric 内部通信呢?还有一些服务,通过远程机制进行通信。

以下是我的问题:

  • 我们是否需要处理 Service Fabric 中 Reliable Services 和 Reliable Actors 之间通信的瞬时故障?
  • 如果是这样 - 如何做到这一点?瞬态故障处理应用程序块是实现内部通信重试策略的唯一方法吗?
  • 如果不是 - Service Fabric 如何处理瞬态故障?

我已经收集的其他信息:

这篇关于服务间通信的文章描述了服务间通信的典型故障处理重试模式。但是,我们使用服务远程处理而不是 ICommunicationClientFactory 和 ICommunicationClient。我不知道如何使用服务远程处理这种典型的故障处理。

小智 5

迟到的答案,但也许人们仍在寻找答案......无论如何,Service Fabric 具有默认的瞬时故障处理(以及非瞬时故障处理)。通过 OperationRetrySettings,您可以自定义这些。您还可以通过 TransportSettings 自定义其他属性。以下是如何自定义这些设置的示例:

FabricTransportSettings transportSettings = new FabricTransportSettings
{
OperationTimeout = TimeSpan.FromSeconds(30)
};

var retrySettings = new OperationRetrySettings(TimeSpan.FromSeconds(15), TimeSpan.FromSeconds(1), 5);

var clientFactory = new Microsoft.ServiceFabric.Services.Remoting.FabricTransport.Client.FabricTransportServiceRemotingClientFactory(transportSettings);

var serviceProxyFactory = new Microsoft.ServiceFabric.Services.Remoting.Client.ServiceProxyFactory((c) => clientFactory, retrySettings);

var client = serviceProxyFactory.CreateServiceProxy<IXyzService>(new Uri("fabric:/Xyz/Service"));

return client;
Run Code Online (Sandbox Code Playgroud)

hth //彼得