Skip to content

Commit 48b702b

Browse files
author
Auri Munoz
committed
Add flag for specifically disabling automatic registration/deregistration
1 parent e22b5f7 commit 48b702b

File tree

6 files changed

+62
-26
lines changed

6 files changed

+62
-26
lines changed

extensions/smallrye-stork/deployment/src/main/java/io/quarkus/stork/deployment/SmallRyeStorkProcessor.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import static java.util.Arrays.asList;
44

5+
import org.eclipse.microprofile.config.Config;
6+
import org.eclipse.microprofile.config.ConfigProvider;
57
import org.jboss.jandex.DotName;
68
import org.jboss.logging.Logger;
79

@@ -17,6 +19,7 @@
1719
import io.quarkus.deployment.annotations.ExecutionTime;
1820
import io.quarkus.deployment.annotations.Produce;
1921
import io.quarkus.deployment.annotations.Record;
22+
import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
2023
import io.quarkus.deployment.builditem.RunTimeConfigurationDefaultBuildItem;
2124
import io.quarkus.deployment.builditem.RuntimeConfigSetupCompleteBuildItem;
2225
import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
@@ -106,11 +109,21 @@ void initializeStork(SmallRyeStorkRecorder storkRecorder, ShutdownContextBuildIt
106109
@Record(ExecutionTime.RUNTIME_INIT)
107110
void checkStorkConsulRegistrar(BuildProducer<StorkRegistrationBuildItem> registration,
108111
BuildProducer<RunTimeConfigurationDefaultBuildItem> config,
109-
StorkRegistrarConfigRecorder registrarConfigRecorder, StorkConfiguration configuration) {
112+
StorkRegistrarConfigRecorder registrarConfigRecorder, StorkConfiguration configuration, Capabilities capabilities,
113+
CombinedIndexBuildItem index) {
114+
String smallryeHealthCheckDefaultUrl = "";
110115
if (QuarkusClassLoader.isClassPresentAtRuntime(CONSUL_SERVICE_REGISTRAR_PROVIDER)) {
111-
registrarConfigRecorder.setupServiceRegistrarConfig(configuration, CONSUL_SERVICE_REGISTRAR_TYPE);
116+
if (capabilities.isPresent(Capability.SMALLRYE_HEALTH)) {
117+
Config quarkusConfig = ConfigProvider.getConfig();
118+
smallryeHealthCheckDefaultUrl = quarkusConfig.getConfigValue("quarkus.management.root-path").getValue() + "/"
119+
+ quarkusConfig.getConfigValue("quarkus.smallrye-health.root-path").getValue() + "/"
120+
+ quarkusConfig.getConfigValue("quarkus.smallrye-health.liveness-path").getValue();
121+
}
122+
registrarConfigRecorder.setupServiceRegistrarConfig(configuration, CONSUL_SERVICE_REGISTRAR_TYPE,
123+
smallryeHealthCheckDefaultUrl);
112124
} else if (QuarkusClassLoader.isClassPresentAtRuntime(EUREKA_SERVICE_REGISTRAR_PROVIDER)) {
113-
registrarConfigRecorder.setupServiceRegistrarConfig(configuration, EUREKA_SERVICE_REGISTRAR_TYPE);
125+
registrarConfigRecorder.setupServiceRegistrarConfig(configuration, EUREKA_SERVICE_REGISTRAR_TYPE,
126+
smallryeHealthCheckDefaultUrl);
114127
}
115128
registration.produce(new StorkRegistrationBuildItem());
116129

extensions/smallrye-stork/deployment/src/main/java/io/quarkus/stork/deployment/StorkRegistrationBuildItem.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,4 @@
44

55
public final class StorkRegistrationBuildItem extends SimpleBuildItem {
66

7-
// public static final String UNSET_VALUE = "<<unset>>";
8-
//
9-
// private final List<ServiceConfig> serviceConfigs;
10-
11-
// public StorkRegistrationBuildItem(List<ServiceConfig> serviceConfigs) {
12-
// this.serviceConfigs = serviceConfigs;
13-
// }
14-
15-
// public List<ServiceConfig> getServiceConfigs() {
16-
// return this.serviceConfigs;
17-
// }
18-
197
}

extensions/smallrye-stork/runtime/src/main/java/io/quarkus/stork/SmallRyeStorkRegistrationRecorder.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ public void registerServiceInstance(StorkConfiguration configuration) {
2020
Config quarkusConfig = ConfigProvider.getConfig();
2121
for (ServiceConfig serviceConfig : serviceConfigs) {
2222
String serviceName = serviceConfig.serviceName();
23+
if (configuration.serviceConfiguration().get(serviceName).serviceRegistrar().isPresent()) {
24+
StorkServiceRegistrarConfiguration storkServiceRegistrarConfiguration = configuration.serviceConfiguration()
25+
.get(serviceName).serviceRegistrar().get();
26+
if (!storkServiceRegistrarConfiguration.enabled()) {
27+
continue;
28+
}
29+
}
2330
Map<String, String> parameters = serviceConfig.serviceRegistrar().parameters();
2431
String host = parameters.containsKey("ip-address") ? parameters.get("ip-address")
2532
: quarkusConfig.getValue("quarkus.http.host", String.class);
@@ -47,6 +54,13 @@ private void deregisterServiceInstance(StorkConfiguration configuration) {
4754
List<ServiceConfig> serviceConfigs = StorkConfigUtil.toStorkServiceConfig(configuration);
4855
for (ServiceConfig serviceConfig : serviceConfigs) {
4956
String serviceName = serviceConfig.serviceName();
57+
if (configuration.serviceConfiguration().get(serviceName).serviceRegistrar().isPresent()) {
58+
StorkServiceRegistrarConfiguration storkServiceRegistrarConfiguration = configuration.serviceConfiguration()
59+
.get(serviceName).serviceRegistrar().get();
60+
if (!storkServiceRegistrarConfiguration.enabled()) {
61+
continue;
62+
}
63+
}
5064
Stork.getInstance().getService(serviceName).getServiceRegistrar().deregisterServiceInstance(serviceName).await()
5165
.indefinitely();
5266
}

extensions/smallrye-stork/runtime/src/main/java/io/quarkus/stork/StorkConfigUtil.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.net.UnknownHostException;
77
import java.util.ArrayList;
88
import java.util.Enumeration;
9+
import java.util.HashMap;
910
import java.util.List;
1011
import java.util.Map;
1112
import java.util.Optional;
@@ -47,15 +48,22 @@ public static List<ServiceConfig> toStorkServiceConfig(StorkConfiguration storkC
4748
return storkServicesConfigs;
4849
}
4950

50-
public static ServiceConfiguration buildDefaultRegistrarConfiguration(String serviceRegistrarType) {
51-
return buildServiceConfigurationWithRegistrar(serviceRegistrarType, Map.of());
51+
public static ServiceConfiguration buildDefaultRegistrarConfiguration(String serviceRegistrarType, String healthCheckUrl) {
52+
Map<String, String> parameters = new HashMap<>();
53+
if (healthCheckUrl != null && !healthCheckUrl.isBlank()) {
54+
parameters.put("health-check-url", healthCheckUrl);
55+
}
56+
return buildServiceConfigurationWithRegistrar(serviceRegistrarType, parameters);
5257
}
5358

5459
public static ServiceConfiguration addRegistrarTypeIfAbsent(String serviceRegistrarType,
55-
ServiceConfiguration serviceConfiguration) {
60+
ServiceConfiguration serviceConfiguration, String healthCheckUrl) {
5661
Map<String, String> parameters = serviceConfiguration.serviceRegistrar()
5762
.map(StorkServiceRegistrarConfiguration::parameters)
58-
.orElse(Map.of());
63+
.orElse(new HashMap<>());
64+
if (healthCheckUrl != null && !healthCheckUrl.isBlank()) {
65+
parameters.put("health-check-url", healthCheckUrl);
66+
}
5967
return buildServiceConfigurationWithRegistrar(serviceRegistrarType, parameters);
6068
}
6169

@@ -81,6 +89,11 @@ public Optional<StorkServiceRegistrarConfiguration> serviceRegistrar() {
8189
private static StorkServiceRegistrarConfiguration buildServiceRegistrarConfiguration(String type,
8290
Map<String, String> parameters) {
8391
return new StorkServiceRegistrarConfiguration() {
92+
@Override
93+
public boolean enabled() {
94+
return true;
95+
}
96+
8497
@Override
8598
public Optional<String> type() {
8699
return Optional.of(type);

extensions/smallrye-stork/runtime/src/main/java/io/quarkus/stork/StorkRegistrarConfigRecorder.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class StorkRegistrarConfigRecorder {
1414

1515
private static final Logger LOGGER = Logger.getLogger(StorkRegistrarConfigRecorder.class.getName());
1616

17-
public void setupServiceRegistrarConfig(StorkConfiguration config, String serviceRegistrarType) {
17+
public void setupServiceRegistrarConfig(StorkConfiguration config, String serviceRegistrarType, String healthCheckUrl) {
1818
Config quarkusConfig = ConfigProvider.getConfig();
1919
List<ServiceConfig> serviceConfigs = StorkConfigUtil.toStorkServiceConfig(config);
2020
List<ServiceConfig> registrationConfigs = serviceConfigs.stream()
@@ -23,21 +23,23 @@ public void setupServiceRegistrarConfig(StorkConfiguration config, String servic
2323
.orElse("auri-application");
2424
if (registrationConfigs.isEmpty()) {
2525
config.serviceConfiguration().put(serviceName,
26-
StorkConfigUtil.buildDefaultRegistrarConfiguration(serviceRegistrarType));
26+
StorkConfigUtil.buildDefaultRegistrarConfiguration(serviceRegistrarType, healthCheckUrl));
2727
} else if (registrationConfigs.size() == 1) {
2828
config.serviceConfiguration().computeIfPresent(serviceName,
29-
(k, v) -> StorkConfigUtil.addRegistrarTypeIfAbsent(serviceRegistrarType, v));
29+
(k, serviceConfiguration) -> StorkConfigUtil.addRegistrarTypeIfAbsent(serviceRegistrarType,
30+
serviceConfiguration, healthCheckUrl));
3031
} else {
31-
failOnMissingRegistrarTypes(registrationConfigs, serviceName);
32+
failOnMissingRegistrarTypes(registrationConfigs);
3233
}
3334
}
3435

35-
private static void failOnMissingRegistrarTypes(List<ServiceConfig> registrationConfigs, String serviceName) {
36+
private static void failOnMissingRegistrarTypes(List<ServiceConfig> registrationConfigs) {
3637
List<String> servicesWithMissingType = new ArrayList<>();
3738
for (ServiceConfig registrationConfig : registrationConfigs) {
3839
if (registrationConfig.serviceRegistrar().type().isBlank()) {
3940
servicesWithMissingType.add(registrationConfig.serviceName());
40-
LOGGER.info("Missing 'type' for service '" + serviceName + "'. This may lead to a runtime error.");
41+
LOGGER.info("Missing 'type' for service '" + registrationConfig.serviceName()
42+
+ "'. This may lead to a runtime error.");
4143
}
4244

4345
}

extensions/smallrye-stork/runtime/src/main/java/io/quarkus/stork/StorkServiceRegistrarConfiguration.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,18 @@
44
import java.util.Optional;
55

66
import io.quarkus.runtime.annotations.ConfigGroup;
7+
import io.smallrye.config.WithDefault;
78
import io.smallrye.config.WithParentName;
89

910
@ConfigGroup
1011
public interface StorkServiceRegistrarConfiguration {
1112

13+
/**
14+
* Whether automatic registration and deregistration of service instances is enabled.
15+
*/
16+
@WithDefault("true")
17+
boolean enabled();
18+
1219
/**
1320
* Configures service registrar type, e.g. "consul".
1421
* A ServiceRegistrarProvider for the type has to be available
@@ -21,7 +28,6 @@ public interface StorkServiceRegistrarConfiguration {
2128
* Check the documentation of the selected registrar type for available parameters
2229
*
2330
*/
24-
// @ConfigItem(name = ConfigItem.PARENT)
2531
@WithParentName
2632
Map<String, String> parameters();
2733

0 commit comments

Comments
 (0)