* Add stats lifecycle bean. Add onStartRequest method to LoadBalancerLifecycle. Add loadbalancer.Request field to CompletionContext.
* Add TimedRequestContext interface. Make RetryableRequestContext extend RequestDataContext. Improve generating metrics. Add utility class for working with tags. Ensure tags are not null.
* Add separate meters depending on CompletionContext.Status.
* Modify registered metrics. Add adapter for BlockingLoadBalancerClient requests. Add autoconfiguration.
* Make new config conditional on MeterRegistry class.
* Rename lifecycle bean. Do not log request if 0 timestamp.
* Fix onStartRequest call arguments for BlockingLoadBalancerClient.
* Fix onStartRequest and onComplete calls for RetryLoadBalancerInterceptor.
* Only register timed request once. Add tests.
* Adjust tags logic. Add more tests.
* Add more tests.
* Refactor. Add javadocs.
* Refactor.
* Refactor.
* Retrieve client response data if possible in BlockingLoadBalancerClient.
* Refactor.
* Fix docs after review.
* Make previousServiceInstanceMutable.
* Change argument order for CompletionContext constructors. Remove duplicated start time setting.
* Implement retry logic.
* Fix retrying on next instance when RetryExhausted in same instance.
* Fix retrying on next instance when RetryExhausted in same instance.
* Fix retrying on next instance when RetryExhausted in same instance.
* Move duplicated methods to utility class. Fix checkstyle.
* Fix test.
* Add more tests.
* Fix test.
* Add autoConfiguration.
* Refactor and add javadocs.
* Add javadocs.
* Use RetryAwareServiceInstanceListSupplier with reactive retries.
* Update properties.
* Fix the docs.
* Rename utility class.
* Verify interactions in order.
* cherry-pick switching to properties
* Pass information on previous ServiceInstance to RequestContext.
# Conflicts:
# spring-cloud-loadbalancer/src/main/java/org/springframework/cloud/loadbalancer/blocking/retry/BlockingLoadBalancedRetryPolicy.java
* Add a RoundRobinLoadBalancer implementation that avoids same service instance while retrying.
* Wrap instances in ArrayList. Add tests.
* Enable AvoidPreviousInstanceRoundRobinLoadBalancer by default if SpringRetry on classpath.
* Fix failing tests. Add javadocs and author tags.
* Fix properties.
* Add documentation.
* Fix docs after review.
* Fix docs after review.
* Handle avoiding previous instance with ServiceInstanceListSupplier in place of LoadBalancer.
* Fix property name.
* Change spelling.
* Add LoadBalancerLifecycle. Trigger lifecycle callbacks. Set hints from properties.
* Trigger LB lifecycle callbacks from BlockingLoadBalancerClient and RetryLoadBalancerInterceptor.
* Register LifecycleProcessors with @LoadBalancerClients
* Register LifecycleProcessors with @LoadBalancerClients configuration.
* Handle null lifecycle beans map returned from factory. Adjust tests to code changes.
* Handle null lifecycle beans map returned from factory in RetryLoadBalancerInterceptor. Ensure ReactiveLoadBalancer.Factory bean is present while instantiating RetryLoadBalancerInterceptor. Add more tests.
* Remove generics from supports(...) method signature.
* Allow setting hint per service via properties.
* Add some toString() methods. Add more info on deprecated callbacks in javadocs and comments.
* Add javadocs.
* Format javadocs. Add docs.
* Update hint docs.
* Fix docs.
* Fix docs.
* Extract filtering supported lifecycle processors to a separate class; Execute onComplete() calls for DISCARD status in RetryLoadBalancerInterceptor. Remove duplicated `onComplete` calls for FAILED and SUCCESS status in RetryLoadBalancerInterceptor. Add test for no duplicated lifecycle calls in RetryLoadBalancerInterceptorTest.
* Small refactoring: remove deprecated methods use, add final keywords, remove unnecessary keywords.
* Add javadoc.