Skip to content

Commit

Permalink
Support Stork configuration under the quarkus namespace
Browse files Browse the repository at this point in the history
  • Loading branch information
aureamunoz committed Mar 10, 2022
1 parent c49f833 commit 046a0de
Show file tree
Hide file tree
Showing 8 changed files with 165 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
import io.quarkus.deployment.builditem.nativeimage.ServiceProviderBuildItem;
import io.quarkus.stork.SmallRyeStorkRecorder;
import io.quarkus.stork.StorkConfigProvider;
import io.quarkus.stork.StorkConfiguration;
import io.quarkus.vertx.deployment.VertxBuildItem;
import io.smallrye.stork.microprofile.MicroProfileConfigProvider;
import io.smallrye.stork.spi.internal.LoadBalancerLoader;
Expand All @@ -22,7 +24,7 @@ public class SmallRyeStorkProcessor {
@BuildStep
void registerServiceProviders(BuildProducer<ServiceProviderBuildItem> services) {
services.produce(new ServiceProviderBuildItem(io.smallrye.stork.spi.config.ConfigProvider.class.getName(),
MicroProfileConfigProvider.class.getName()));
MicroProfileConfigProvider.class.getName(), StorkConfigProvider.class.getName()));

for (Class<?> providerClass : asList(LoadBalancerLoader.class, ServiceDiscoveryLoader.class)) {
services.produce(ServiceProviderBuildItem.allProvidersFromClassPath(providerClass.getName()));
Expand All @@ -33,7 +35,9 @@ void registerServiceProviders(BuildProducer<ServiceProviderBuildItem> services)
@Record(ExecutionTime.RUNTIME_INIT)
@Consume(RuntimeConfigSetupCompleteBuildItem.class)
@Consume(SyntheticBeansRuntimeInitBuildItem.class)
void initializeStork(SmallRyeStorkRecorder storkRecorder, ShutdownContextBuildItem shutdown, VertxBuildItem vertx) {
storkRecorder.initialize(shutdown, vertx.getVertx());
void initializeStork(SmallRyeStorkRecorder storkRecorder, ShutdownContextBuildItem shutdown, VertxBuildItem vertx,
StorkConfiguration configuration) {
storkRecorder.initialize(shutdown, vertx.getVertx(), configuration);
}

}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package io.quarkus.stork;

import java.util.List;

import io.quarkus.runtime.RuntimeValue;
import io.quarkus.runtime.ShutdownContext;
import io.quarkus.runtime.annotations.Recorder;
import io.smallrye.stork.Stork;
import io.smallrye.stork.api.config.ServiceConfig;
import io.vertx.core.Vertx;

@Recorder
public class SmallRyeStorkRecorder {

public void initialize(ShutdownContext shutdown, RuntimeValue<Vertx> vertx) {
public void initialize(ShutdownContext shutdown, RuntimeValue<Vertx> vertx, StorkConfiguration configuration) {
List<ServiceConfig> serviceConfigs = StorkConfigUtil.toStorkServiceConfig(configuration);
StorkConfigProvider.init(serviceConfigs);
Stork.initialize(new QuarkusStorkInfrastructure(vertx.getValue()));
shutdown.addShutdownTask(new Runnable() {
@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package io.quarkus.stork;

import java.util.ArrayList;
import java.util.List;

import io.smallrye.stork.api.config.ServiceConfig;
import io.smallrye.stork.spi.config.ConfigProvider;

public class StorkConfigProvider implements ConfigProvider {

private static final List<ServiceConfig> serviceConfigs = new ArrayList<>();

public static void init(List<ServiceConfig> configs) {
serviceConfigs.addAll(configs);
}

public StorkConfigProvider() {

}

@Override
public List<ServiceConfig> getConfigs() {
return serviceConfigs;
}

@Override
public int priority() {
return 150;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package io.quarkus.stork;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import io.smallrye.stork.api.config.ServiceConfig;
import io.smallrye.stork.spi.config.SimpleServiceConfig;

public class StorkConfigUtil {

public static List<ServiceConfig> toStorkServiceConfig(StorkConfiguration storkConfiguration) {
List<ServiceConfig> storkServicesConfigs = new ArrayList<>();
Set<String> services = storkConfiguration.serviceDiscovery.keySet();
SimpleServiceConfig.Builder builder = new SimpleServiceConfig.Builder();
for (String serviceName : services) {
builder.setServiceName(serviceName);
StorkServiceDiscoveryConfiguration storkServiceDiscoveryConfiguration = storkConfiguration.serviceDiscovery
.get(serviceName);
SimpleServiceConfig.SimpleServiceDiscoveryConfig serviceDiscoveryConfig = new SimpleServiceConfig.SimpleServiceDiscoveryConfig(
storkServiceDiscoveryConfiguration.type, storkServiceDiscoveryConfiguration.params);
builder.setServiceDiscovery(serviceDiscoveryConfig);
if (!storkConfiguration.loadBalancer.isEmpty()) {
StorkLoadBalancerConfiguration storkLoadBalancerConfiguration = storkConfiguration.loadBalancer
.get(serviceName);
SimpleServiceConfig.SimpleLoadBalancerConfig loadBalancerConfig = new SimpleServiceConfig.SimpleLoadBalancerConfig(
storkLoadBalancerConfiguration.type, storkLoadBalancerConfiguration.parameters);
builder.setLoadBalancer(loadBalancerConfig);
}
storkServicesConfigs.add(builder.build());
}
return storkServicesConfigs;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package io.quarkus.stork;

import java.util.Map;

import io.quarkus.runtime.annotations.ConfigDocMapKey;
import io.quarkus.runtime.annotations.ConfigDocSection;
import io.quarkus.runtime.annotations.ConfigItem;
import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;

/**
* Stork configuration root.
*/
@ConfigRoot(phase = ConfigPhase.RUN_TIME)
public class StorkConfiguration {

/**
* ServiceDiscovery configuration for the service
*/
@ConfigItem
@ConfigDocSection
@ConfigDocMapKey("service-name")
public Map<String, StorkServiceDiscoveryConfiguration> serviceDiscovery;

/**
* LoadBalancer configuration for the service
*/
@ConfigItem
@ConfigDocSection
@ConfigDocMapKey("service-name")
public Map<String, StorkLoadBalancerConfiguration> loadBalancer;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.quarkus.stork;

import java.util.Map;

import io.quarkus.runtime.annotations.ConfigGroup;
import io.quarkus.runtime.annotations.ConfigItem;

@ConfigGroup
public class StorkLoadBalancerConfiguration {

/**
* Configures load balancer type, e.g. "round-robin".
* A LoadBalancerProvider for the type has to be available
*
*/
@ConfigItem
public String type;

/**
* Load Balancer parameters.
*
*/
@ConfigItem
public Map<String, String> parameters;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package io.quarkus.stork;

import java.util.Map;

import io.quarkus.runtime.annotations.ConfigGroup;
import io.quarkus.runtime.annotations.ConfigItem;

@ConfigGroup
public class StorkServiceDiscoveryConfiguration {

/**
* Configures the service discovery type, e.g. "consul".
* ServiceDiscoveryProvider for the type has to be available
*
*/
@ConfigItem
public String type;

/**
* ServiceDiscovery parameters.
*
*/
@ConfigItem
public Map<String, String> params;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
io.quarkus.stork.StorkConfigProvider

0 comments on commit 046a0de

Please sign in to comment.