Adds anagement registration customizer (#479)
Management registration customizer fixes gh-478
This commit is contained in:
committed by
Spencer Gibb
parent
a706683bd3
commit
ddd9961120
@@ -16,6 +16,7 @@
|
||||
|
||||
package org.springframework.cloud.consul.serviceregistry;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -42,13 +43,22 @@ public class ConsulAutoRegistration extends ConsulRegistration {
|
||||
private final AutoServiceRegistrationProperties autoServiceRegistrationProperties;
|
||||
private final ApplicationContext context;
|
||||
private final HeartbeatProperties heartbeatProperties;
|
||||
private final List<ConsulManagementRegistrationCustomizer> managementRegistrationCustomizers;
|
||||
|
||||
@Deprecated
|
||||
public ConsulAutoRegistration(NewService service, AutoServiceRegistrationProperties autoServiceRegistrationProperties,
|
||||
ConsulDiscoveryProperties properties, ApplicationContext context, HeartbeatProperties heartbeatProperties) {
|
||||
this(service, autoServiceRegistrationProperties, properties, context, heartbeatProperties, Collections.emptyList());
|
||||
}
|
||||
|
||||
public ConsulAutoRegistration(NewService service, AutoServiceRegistrationProperties autoServiceRegistrationProperties,
|
||||
ConsulDiscoveryProperties properties, ApplicationContext context, HeartbeatProperties heartbeatProperties,
|
||||
List<ConsulManagementRegistrationCustomizer> managementRegistrationCustomizers) {
|
||||
super(service, properties);
|
||||
this.autoServiceRegistrationProperties = autoServiceRegistrationProperties;
|
||||
this.context = context;
|
||||
this.heartbeatProperties = heartbeatProperties;
|
||||
this.managementRegistrationCustomizers = managementRegistrationCustomizers;
|
||||
}
|
||||
|
||||
public void initializePort(int knownPort) {
|
||||
@@ -65,12 +75,13 @@ public class ConsulAutoRegistration extends ConsulRegistration {
|
||||
|
||||
public ConsulAutoRegistration managementRegistration() {
|
||||
return managementRegistration(this.autoServiceRegistrationProperties, getProperties(),
|
||||
this.context, this.heartbeatProperties);
|
||||
this.context, this.managementRegistrationCustomizers, this.heartbeatProperties);
|
||||
}
|
||||
|
||||
public static ConsulAutoRegistration registration(AutoServiceRegistrationProperties autoServiceRegistrationProperties,
|
||||
ConsulDiscoveryProperties properties, ApplicationContext context,
|
||||
List<ConsulRegistrationCustomizer> registrationCustomizers,
|
||||
List<ConsulManagementRegistrationCustomizer> managementRegistrationCustomizers,
|
||||
HeartbeatProperties heartbeatProperties) {
|
||||
|
||||
NewService service = new NewService();
|
||||
@@ -89,7 +100,7 @@ public class ConsulAutoRegistration extends ConsulRegistration {
|
||||
}
|
||||
|
||||
ConsulAutoRegistration registration = new ConsulAutoRegistration(service, autoServiceRegistrationProperties,
|
||||
properties, context, heartbeatProperties);
|
||||
properties, context, heartbeatProperties, managementRegistrationCustomizers);
|
||||
customize(registrationCustomizers, registration);
|
||||
return registration;
|
||||
}
|
||||
@@ -121,6 +132,7 @@ public class ConsulAutoRegistration extends ConsulRegistration {
|
||||
public static ConsulAutoRegistration managementRegistration(
|
||||
AutoServiceRegistrationProperties autoServiceRegistrationProperties,
|
||||
ConsulDiscoveryProperties properties, ApplicationContext context,
|
||||
List<ConsulManagementRegistrationCustomizer> managementRegistrationCustomizers,
|
||||
HeartbeatProperties heartbeatProperties) {
|
||||
NewService management = new NewService();
|
||||
management.setId(getManagementServiceId(properties, context));
|
||||
@@ -131,7 +143,17 @@ public class ConsulAutoRegistration extends ConsulRegistration {
|
||||
if (properties.isRegisterHealthCheck()) {
|
||||
management.setCheck(createCheck(getManagementPort(properties, context), heartbeatProperties, properties));
|
||||
}
|
||||
return new ConsulAutoRegistration(management, autoServiceRegistrationProperties, properties, context, heartbeatProperties);
|
||||
ConsulAutoRegistration registration = new ConsulAutoRegistration(management, autoServiceRegistrationProperties, properties, context, heartbeatProperties, managementRegistrationCustomizers);
|
||||
managementCustomize(managementRegistrationCustomizers, registration);
|
||||
return registration;
|
||||
}
|
||||
|
||||
public static void managementCustomize(List<ConsulManagementRegistrationCustomizer> registrationCustomizers, ConsulAutoRegistration registration) {
|
||||
if (registrationCustomizers != null) {
|
||||
for (ConsulManagementRegistrationCustomizer customizer : registrationCustomizers) {
|
||||
customizer.customize(registration);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public static String getInstanceId(ConsulDiscoveryProperties properties, ApplicationContext context) {
|
||||
|
||||
@@ -70,9 +70,13 @@ public class ConsulAutoServiceRegistrationAutoConfiguration {
|
||||
@ConditionalOnMissingBean
|
||||
public ConsulAutoRegistration consulRegistration(AutoServiceRegistrationProperties autoServiceRegistrationProperties,
|
||||
ConsulDiscoveryProperties properties, ApplicationContext applicationContext,
|
||||
ObjectProvider<List<ConsulRegistrationCustomizer>> registrationCustomizers, HeartbeatProperties heartbeatProperties) {
|
||||
ObjectProvider<List<ConsulRegistrationCustomizer>> registrationCustomizers,
|
||||
ObjectProvider<List<ConsulManagementRegistrationCustomizer>> managementRegistrationCustomizers,
|
||||
HeartbeatProperties heartbeatProperties) {
|
||||
return ConsulAutoRegistration.registration(autoServiceRegistrationProperties, properties,
|
||||
applicationContext, registrationCustomizers.getIfAvailable(), heartbeatProperties);
|
||||
applicationContext, registrationCustomizers.getIfAvailable(),
|
||||
managementRegistrationCustomizers.getIfAvailable(),
|
||||
heartbeatProperties);
|
||||
}
|
||||
|
||||
@Configuration
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* Copyright 2013-2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.cloud.consul.serviceregistry;
|
||||
|
||||
/**
|
||||
* @author Alexey Savchuk (devpreview)
|
||||
*/
|
||||
public interface ConsulManagementRegistrationCustomizer {
|
||||
void customize(ConsulRegistration managementRegistration);
|
||||
}
|
||||
@@ -0,0 +1,105 @@
|
||||
/*
|
||||
* Copyright 2013-2016 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.cloud.consul.serviceregistry;
|
||||
|
||||
import com.ecwid.consul.v1.agent.model.NewService;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
|
||||
import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration;
|
||||
import org.springframework.cloud.consul.ConsulAutoConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT;
|
||||
|
||||
/**
|
||||
* @author Alexey Savchuk (devpreview)
|
||||
*/
|
||||
@RunWith(SpringRunner.class)
|
||||
@SpringBootTest(classes = {
|
||||
ConsulAutoServiceRegistrationManagementCustomizerTests.TestConfig.class,
|
||||
ConsulAutoServiceRegistrationManagementCustomizerTests.ManagementConfig.class
|
||||
}, properties = {
|
||||
"spring.application.name=myTestService-SS",
|
||||
"spring.cloud.consul.discovery.registerHealthCheck=false",
|
||||
"management.server.port=4453"
|
||||
}, webEnvironment = RANDOM_PORT)
|
||||
public class ConsulAutoServiceRegistrationManagementCustomizerTests {
|
||||
|
||||
@Autowired
|
||||
private ConsulRegistration registration;
|
||||
|
||||
@Autowired
|
||||
private ConsulAutoRegistration autoRegistration;
|
||||
|
||||
@Test
|
||||
public void contextLoads() {
|
||||
ConsulAutoRegistration managementRegistration = autoRegistration.managementRegistration();
|
||||
List<NewService.Check> checks = managementRegistration.getService().getChecks();
|
||||
List<String> ttls = checks.stream().map(NewService.Check::getTtl).collect(Collectors.toList());
|
||||
Assert.assertTrue("Management registration not customized with 'foo' customizer", ttls.contains("39s"));
|
||||
Assert.assertTrue("Management registration not customized with 'bar' customizer", ttls.contains("36s"));
|
||||
}
|
||||
|
||||
@Configuration
|
||||
public static class ManagementConfig {
|
||||
|
||||
@Bean
|
||||
public ConsulManagementRegistrationCustomizer fooManagementCustomizer() {
|
||||
return managementRegistration -> {
|
||||
addCheck(managementRegistration, "39s");
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConsulManagementRegistrationCustomizer barManagementCustomizer() {
|
||||
return managementRegistration -> {
|
||||
addCheck(managementRegistration, "36s");
|
||||
};
|
||||
}
|
||||
|
||||
private void addCheck(ConsulRegistration managementRegistration, String ttl) {
|
||||
NewService managementService = managementRegistration.getService();
|
||||
NewService.Check check = new NewService.Check();
|
||||
check.setTtl(ttl);
|
||||
List<NewService.Check> checks = managementService.getChecks() != null ? new ArrayList<>(managementService.getChecks()) : new ArrayList<>();
|
||||
checks.add(check);
|
||||
managementRegistration.getService().setChecks(checks);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Configuration
|
||||
@EnableAutoConfiguration
|
||||
@ImportAutoConfiguration({
|
||||
AutoServiceRegistrationConfiguration.class,
|
||||
ConsulAutoConfiguration.class,
|
||||
ConsulAutoServiceRegistrationAutoConfiguration.class
|
||||
})
|
||||
public static class TestConfig {
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user