,----------------------------------------------------------------------------------------------------------. ,-------------------------------------------. ,-----------------------------------. ,---------------------------------. |LoadBalancedRetryFactory | ,-----------------------------------------------------------------------------. |ServiceInstanceChooser | |LoadBalancerRequest | |LoadBalancedRetryContext | |----------------------------------------------------------------------------------------------------------| |LoadBalancerRequestTransformer | |-------------------------------------------| |-----------------------------------| |---------------------------------| |+ LoadBalancedRetryPolicy createRetryPolicy(String service, ServiceInstanceChooser serviceInstanceChooser)| |-----------------------------------------------------------------------------| |+ ServiceInstance choose(String serviceId);| |+ T apply(ServiceInstance instance)| |- HttpRequest request; | |+ RetryListener[] createRetryListeners(String service) | |+ HttpRequest transformRequest(HttpRequest request, ServiceInstance instance)| `-------------------------------------------' `-----------------------------------' |- ServiceInstance serviceInstance| |+ BackOffPolicy createBackOffPolicy(String service) | `-----------------------------------------------------------------------------' `---------------------------------' `----------------------------------------------------------------------------------------------------------' | | ,-------------------------------------------------------------------------------. ,---------------------------------------------------------------------------------------------------. |LoadBalancedRetryPolicy | |LoadBalancerClient | |-------------------------------------------------------------------------------| |---------------------------------------------------------------------------------------------------| |+ boolean canRetrySameServer(LoadBalancedRetryContext context) | |+ T execute(String serviceId, LoadBalancerRequest request); | |+ boolean canRetryNextServer(LoadBalancedRetryContext context) | |+ T execute(String serviceId, ServiceInstance serviceInstance, LoadBalancerRequest request);| |+ void close(LoadBalancedRetryContext context) | |+ URI reconstructURI(ServiceInstance instance, URI original); | |+ void registerThrowable(LoadBalancedRetryContext context, Throwable throwable)| `---------------------------------------------------------------------------------------------------' |+ boolean retryableStatusCode(int statusCode) | `-------------------------------------------------------------------------------'