spring-cloud-commons icon indicating copy to clipboard operation
spring-cloud-commons copied to clipboard

FR: Return the combination of ServiceInstances in CompositeDiscoveryClients

Open driesdeproost opened this issue 3 years ago • 2 comments

Currently the ReactiveCompositeDiscoveryClient returns the first non-empty Flux of ServiceInstances when invoking its getInstances() method.
When you use multiple DiscoveryClients and you want to balance traffic over them (e.g. a weighted load balancing strategy towards multiple cloud environments), you will have to disable the spring.cloud.discovery.reactive.enabled and provide your own implementation that replaces the existing ReactiveCompositeDiscoveryClient. Disabling this property also has some impact on other conditionals, such as in KubernetesInformerReactiveDiscoveryClientAutoConfiguration for example

This is manageable, but it feels like returning combined results of DiscoveryClients instead of returning the first non empty flux would often make more sense.

Would it be possible to add a property to switch the behaviour of the ReactiveCompositeDiscoveryClient so that results from DiscoveryClients are combined? (and perhaps also for the non reactive variant CompositeDiscoveryClient)

driesdeproost avatar Jan 09 '23 13:01 driesdeproost

@driesdeproost Thanks for creating this issue. Makes sense to me. Will discuss this with the team.

OlgaMaciaszek avatar Jan 17 '23 12:01 OlgaMaciaszek

Will have to be opt-in. Also possible consideration: adding info on which DiscoveryClient a SI came from to metadata?

OlgaMaciaszek avatar Jan 17 '23 15:01 OlgaMaciaszek