我们将 Azure Service Fabric 与可靠服务和参与者、IoTHub 和 Web API 结合使用,目前正在集成“ transient 故障处理”(TFH),以处理服务(远程)通信期间的错误。
对于 Azure 存储和 SQL,它已经实现,我们使用内置的重试策略,并且效果很好。
但是 Service Fabric 内部通信又如何呢?还有一些服务通过远程机制进行通信。
这是我的问题:
- 我们是否需要处理 Service Fabric 中 Reliable Services 和 Reliable Actors 之间的通信瞬时故障?
- 如果是这样 - 这怎么办? transient 故障处理应用程序 block 是实现内部通信重试策略的唯一方法吗?
- 如果不是 - Service Fabric 如何处理暂时性故障?
我已经收集的其他信息:
This article about communication between services描述了服务间通信的典型故障处理重试模式。但我们使用服务远程处理来代替 ICommunicationClientFactory 和 ICommunicationClient。我不知道如何通过服务远程处理来使用这种典型的故障处理。
最佳答案
迟到的答案,但也许人们仍在寻找答案...无论如何,Service Fabric 具有默认的 transient 故障处理(以及非 transient 故障处理)。通过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;
hth//彼得
关于azure - 我是否需要重试策略来处理 Service Fabric 内部通信的暂时性故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38562320/