Повторите попытку из 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;
}
}
}
Источники: