2929
3030import org .springframework .boot .autoconfigure .AutoConfigureAfter ;
3131import org .springframework .boot .autoconfigure .AutoConfigureBefore ;
32+ import org .springframework .boot .autoconfigure .condition .ConditionalOnBean ;
3233import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
3334import org .springframework .cloud .client .ReactiveCommonsClientAutoConfiguration ;
3435import org .springframework .cloud .client .discovery .composite .reactive .ReactiveCompositeDiscoveryClientAutoConfiguration ;
@@ -64,35 +65,78 @@ final class KubernetesClientInformerReactiveDiscoveryClientAutoConfiguration {
6465 private static final LogAccessor LOG = new LogAccessor (
6566 LogFactory .getLog (KubernetesClientInformerReactiveDiscoveryClientAutoConfiguration .class ));
6667
67- // in case blocking is disabled
6868 @ Bean
6969 @ ConditionalOnMissingBean
70- KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClientForReactiveImplementation (
70+ @ ConditionalOnDiscoveryCacheableReactiveDisabled
71+ KubernetesClientInformerReactiveDiscoveryClient kubernetesClientReactiveDiscoveryClient (
7172 List <SharedInformerFactory > sharedInformerFactories , List <Lister <V1Service >> serviceListers ,
7273 List <Lister <V1Endpoints >> endpointsListers , List <SharedInformer <V1Service >> serviceInformers ,
7374 List <SharedInformer <V1Endpoints >> endpointsInformers , KubernetesDiscoveryProperties properties ,
7475 CoreV1Api coreV1Api , Predicate <V1Service > predicate ) {
7576
76- return new KubernetesClientInformerDiscoveryClient (sharedInformerFactories , serviceListers , endpointsListers ,
77- serviceInformers , endpointsInformers , properties , coreV1Api , predicate );
77+ KubernetesClientInformerDiscoveryClient blockingClient = new KubernetesClientInformerDiscoveryClient (
78+ sharedInformerFactories , serviceListers , endpointsListers , serviceInformers , endpointsInformers ,
79+ properties , coreV1Api , predicate );
80+
81+ return new KubernetesClientInformerReactiveDiscoveryClient (blockingClient );
7882 }
7983
8084 @ Bean
81- @ ConditionalOnMissingBean
82- @ ConditionalOnDiscoveryCacheableReactiveDisabled
83- KubernetesClientInformerReactiveDiscoveryClient kubernetesClientReactiveDiscoveryClient (
84- KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient ) {
85- return new KubernetesClientInformerReactiveDiscoveryClient (kubernetesClientInformerDiscoveryClient );
85+ @ ConditionalOnBean (KubernetesClientInformerReactiveDiscoveryClient .class )
86+ @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
87+ ReactiveDiscoveryClientHealthIndicator kubernetesReactiveDiscoveryClientHealthIndicator (
88+ KubernetesClientInformerReactiveDiscoveryClient reactiveClient ,
89+ DiscoveryClientHealthIndicatorProperties properties ) {
90+ return new ReactiveDiscoveryClientHealthIndicator (reactiveClient , properties );
8691 }
8792
93+ // Above two beans are created when cacheable is disabled
94+
8895 @ Bean
8996 @ ConditionalOnMissingBean
9097 @ ConditionalOnDiscoveryCacheableReactiveEnabled
9198 KubernetesClientCacheableInformerReactiveDiscoveryClient kubernetesClientCacheableReactiveDiscoveryClient (
92- KubernetesClientInformerDiscoveryClient kubernetesClientInformerDiscoveryClient ) {
93- return new KubernetesClientCacheableInformerReactiveDiscoveryClient (kubernetesClientInformerDiscoveryClient );
99+ List <SharedInformerFactory > sharedInformerFactories , List <Lister <V1Service >> serviceListers ,
100+ List <Lister <V1Endpoints >> endpointsListers , List <SharedInformer <V1Service >> serviceInformers ,
101+ List <SharedInformer <V1Endpoints >> endpointsInformers , KubernetesDiscoveryProperties properties ,
102+ CoreV1Api coreV1Api , Predicate <V1Service > predicate ) {
103+
104+ KubernetesClientInformerDiscoveryClient blockingClient = new KubernetesClientInformerDiscoveryClient (
105+ sharedInformerFactories , serviceListers , endpointsListers , serviceInformers , endpointsInformers ,
106+ properties , coreV1Api , predicate );
107+
108+ return new KubernetesClientCacheableInformerReactiveDiscoveryClient (blockingClient );
109+ }
110+
111+ @ Bean
112+ @ ConditionalOnMissingBean (KubernetesClientInformerReactiveDiscoveryClient .class )
113+ @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
114+ ReactiveDiscoveryClientHealthIndicator reactiveDiscoveryClientHealthIndicator (
115+ List <SharedInformerFactory > sharedInformerFactories , List <Lister <V1Service >> serviceListers ,
116+ List <Lister <V1Endpoints >> endpointsListers , List <SharedInformer <V1Service >> serviceInformers ,
117+ List <SharedInformer <V1Endpoints >> endpointsInformers ,
118+ KubernetesDiscoveryProperties kubernetesDiscoveryProperties , CoreV1Api coreV1Api ,
119+ Predicate <V1Service > predicate , DiscoveryClientHealthIndicatorProperties properties ) {
120+
121+ KubernetesClientInformerDiscoveryClient blockingClient = new KubernetesClientInformerDiscoveryClient (
122+ sharedInformerFactories , serviceListers , endpointsListers , serviceInformers , endpointsInformers ,
123+ kubernetesDiscoveryProperties , coreV1Api , predicate );
124+
125+ KubernetesClientInformerReactiveDiscoveryClient reactiveClient = new KubernetesClientInformerReactiveDiscoveryClient (
126+ blockingClient );
127+
128+ return new ReactiveDiscoveryClientHealthIndicator (reactiveClient , properties );
94129 }
95130
131+ // Above two beans are created when cacheable is enabled. In this case, we can't make
132+ // KubernetesClientInformerDiscoveryClient a @Bean, since blocking discovery might be
133+ // disabled and we do
134+ // not want to allow wiring of it. Nevertheless, we still need an instance of
135+ // KubernetesClientInformerDiscoveryClient
136+ // in order to create the ReactiveDiscoveryClientHealthIndicator and
137+ // KubernetesClientCacheableInformerReactiveDiscoveryClient
138+ // As such, we create two of such instances in each bean.
139+
96140 /**
97141 * Post an event so that health indicator is initialized.
98142 */
@@ -104,15 +148,4 @@ KubernetesDiscoveryClientHealthIndicatorInitializer reactiveIndicatorInitializer
104148 return new KubernetesDiscoveryClientHealthIndicatorInitializer (podUtils , applicationEventPublisher );
105149 }
106150
107- /**
108- * unlike the blocking implementation, we need to register the health indicator.
109- */
110- @ Bean
111- @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
112- ReactiveDiscoveryClientHealthIndicator kubernetesReactiveDiscoveryClientHealthIndicator (
113- KubernetesClientInformerReactiveDiscoveryClient client ,
114- DiscoveryClientHealthIndicatorProperties properties ) {
115- return new ReactiveDiscoveryClientHealthIndicator (client , properties );
116- }
117-
118151}
0 commit comments