2424
2525import org .springframework .boot .autoconfigure .AutoConfigureAfter ;
2626import org .springframework .boot .autoconfigure .AutoConfigureBefore ;
27+ import org .springframework .boot .autoconfigure .condition .ConditionalOnBean ;
2728import org .springframework .boot .autoconfigure .condition .ConditionalOnClass ;
2829import org .springframework .boot .autoconfigure .condition .ConditionalOnMissingBean ;
2930import org .springframework .cloud .client .ConditionalOnDiscoveryHealthIndicatorEnabled ;
@@ -77,6 +78,16 @@ Fabric8ReactiveDiscoveryClient fabric8ReactiveDiscoveryClient(KubernetesClient c
7778 return new Fabric8ReactiveDiscoveryClient (fabric8DiscoveryClient );
7879 }
7980
81+ @ Bean
82+ @ ConditionalOnBean (Fabric8ReactiveDiscoveryClient .class )
83+ @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
84+ ReactiveDiscoveryClientHealthIndicator kubernetesReactiveDiscoveryClientHealthIndicator (
85+ Fabric8ReactiveDiscoveryClient client , DiscoveryClientHealthIndicatorProperties properties ) {
86+ return new ReactiveDiscoveryClientHealthIndicator (client , properties );
87+ }
88+
89+ // Above two beans are created when cacheable is disabled
90+
8091 @ Bean
8192 @ ConditionalOnMissingBean
8293 @ ConditionalOnDiscoveryCacheableReactiveEnabled
@@ -89,23 +100,41 @@ Fabric8CacheableReactiveDiscoveryClient fabric8CacheableReactiveDiscoveryClient(
89100 return new Fabric8CacheableReactiveDiscoveryClient (fabric8DiscoveryClient );
90101 }
91102
103+ @ Bean
104+ @ ConditionalOnMissingBean (Fabric8ReactiveDiscoveryClient .class )
105+ @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
106+ ReactiveDiscoveryClientHealthIndicator kubernetesReactiveClientHealthIndicator (
107+ KubernetesClient client , KubernetesDiscoveryProperties kubernetesDiscoveryProperties ,
108+ Predicate <Service > predicate , DiscoveryClientHealthIndicatorProperties properties , Environment environment ) {
109+
110+ KubernetesNamespaceProvider namespaceProvider = new KubernetesNamespaceProvider (environment );
111+ ServicePortSecureResolver servicePortSecureResolver = new ServicePortSecureResolver (kubernetesDiscoveryProperties );
112+ Fabric8DiscoveryClient fabric8DiscoveryClient =
113+ new Fabric8DiscoveryClient (client , kubernetesDiscoveryProperties ,
114+ servicePortSecureResolver , namespaceProvider , predicate );
115+
116+ Fabric8ReactiveDiscoveryClient fabric8ReactiveDiscoveryClient =
117+ new Fabric8ReactiveDiscoveryClient (fabric8DiscoveryClient );
118+
119+ return new ReactiveDiscoveryClientHealthIndicator (fabric8ReactiveDiscoveryClient , properties );
120+ }
121+
122+ // Above two beans are created when cacheable is enabled. In this case, we can't make
123+ // Fabric8DiscoveryClient a @Bean, since blocking discovery might be disabled and we do
124+ // not want to allow wiring of it. Nevertheless, we still need an instance of Fabric8DiscoveryClient
125+ // in order to create the ReactiveDiscoveryClientHealthIndicator and Fabric8CacheableReactiveDiscoveryClient
126+ // As such, we create two of such instances in each bean.
127+
92128 /**
93129 * Post an event so that health indicator is initialized.
94130 */
95131 @ Bean
96132 @ ConditionalOnClass (name = "org.springframework.boot.health.contributor.ReactiveHealthIndicator" )
97133 @ ConditionalOnDiscoveryHealthIndicatorEnabled
98134 KubernetesDiscoveryClientHealthIndicatorInitializer reactiveIndicatorInitializer (
99- ApplicationEventPublisher applicationEventPublisher , PodUtils <?> podUtils ) {
135+ ApplicationEventPublisher applicationEventPublisher , PodUtils <?> podUtils ) {
100136 LOG .debug (() -> "Will publish InstanceRegisteredEvent from reactive implementation" );
101137 return new KubernetesDiscoveryClientHealthIndicatorInitializer (podUtils , applicationEventPublisher );
102138 }
103139
104- @ Bean
105- @ ConditionalOnSpringCloudKubernetesReactiveDiscoveryHealthInitializer
106- ReactiveDiscoveryClientHealthIndicator kubernetesReactiveDiscoveryClientHealthIndicator (
107- Fabric8ReactiveDiscoveryClient client , DiscoveryClientHealthIndicatorProperties properties ) {
108- return new ReactiveDiscoveryClientHealthIndicator (client , properties );
109- }
110-
111140}
0 commit comments