【问题标题】:Do I need a retry policy to handle transient faults for Service Fabric internal communication?我是否需要重试策略来处理 Service Fabric 内部通信的瞬时故障?
【发布时间】:2016-11-28 11:24:00
【问题描述】:

我们将 Azure Service Fabric 与 Reliable Services 和 Actors、IoTHub 和 Web API 结合使用,目前正在集成“瞬态故障处理”(TFH) 以处理服务(远程)通信期间的错误。

对于 Azure 存储和 SQL,它已经实现,我们为此使用内置的重试策略,并且效果很好。

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

这是我的问题:

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

我已经收集的其他信息:

This article about communication between services 描述了用于服务间通信的典型故障处理重试模式。但是,我们使用服务远程处理来代替 ICommunicationClientFactory 和 ICommunicationClient。我不知道如何将这种典型的故障处理与 Service Remoting 结合使用。

【问题讨论】:

  • 一般来说,在连接到任何资源时,尤其是在云世界中,最好实现瞬态故障处理。即使第一次尝试会成功,拥有它也没有什么坏处。

标签: azure service appfabric transient


【解决方案1】:

迟到的答案,但也许人们仍在寻找答案......无论如何,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;

hth //彼得

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    相关资源
    最近更新 更多