Повторите попытку из API удаленного взаимодействия службы для IExceptionHandler.

Если serviceA выполняет удаленный вызов ServiceB, в настоящее время API-интерфейсы Remoting Service Fabric не повторяют попытку, если из ServiceB в ServiceA возникло какое-то исключение.

Проблема: я пытаюсь использовать повторную попытку удаленного взаимодействия службы для повторной попытки временных исключений в нашей службе. Я попытался передать свой собственный обработчик исключений в FabricTransportServiceRemotingClientFactory, но повторные попытки все равно не вызываются.

      private static readonly Lazy<CustomServiceProxyFactory> serviceProxyFactory = new Lazy<CustomServiceProxyFactory>(() =>
{
    IEnumerable<IExceptionHandler> exceptionHandler = new List<ExceptionHandler>();

    FabricTransportRemotingSettings transportSetting = SecureRemotingHelper.GetClientTransportSetting(SecureRemotingClientConfiguration.GetConfig());
    return new CustomServiceProxyFactory((c) => new FabricTransportServiceRemotingClientFactory(transportSetting, null, null, exceptionHandler));
});

public class ExceptionHandler : IExceptionHandler
{
    public bool TryHandleException(ExceptionInformation exceptionInformation, OperationRetrySettings retrySettings, out ExceptionHandlingResult result)
    {
        ExponentialRetryPolicy retryPolicy = new ExponentialRetryPolicy(3, TimeSpan.FromMilliseconds(5000));

        if (exceptionInformation.Exception is Microsoft.OmniChannel.Storage.ServiceModel.Exception.StorageException exception && exception.ErrorCode == ErrorCode.TOO_MANY_REQUESTS)
        {
            result = new ExceptionHandlingRetryResult(exceptionInformation.Exception, true, new OperationRetrySettings(retryPolicy), 3);
            return true;
        }
        else
        {
            result = new ExceptionHandlingThrowResult();
            return false;
        }
    }
}

Источники:

0 ответов