Skip to content

Commit

Permalink
Detects dynamic mgmt port in auto service registration.
Browse files Browse the repository at this point in the history
Fixes gh-561
Fixes gh-562
  • Loading branch information
chriswhite199 authored and spencergibb committed Mar 15, 2021
1 parent 483f4a6 commit c92a941
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,17 @@
import org.apache.commons.logging.LogFactory;

import org.springframework.beans.BeansException;
import org.springframework.boot.web.context.ConfigurableWebServerApplicationContext;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.boot.web.context.WebServerInitializedEvent;
import org.springframework.cloud.client.discovery.ManagementServerPortUtils;
import org.springframework.cloud.client.discovery.event.InstancePreRegisteredEvent;
import org.springframework.cloud.client.discovery.event.InstanceRegisteredEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;

/**
* Lifecycle methods that may be useful and common to {@link ServiceRegistry}
Expand All @@ -43,9 +45,10 @@
*
* @param <R> Registration type passed to the {@link ServiceRegistry}.
* @author Spencer Gibb
* @author Chris White
*/
public abstract class AbstractAutoServiceRegistration<R extends Registration>
implements AutoServiceRegistration, ApplicationContextAware, ApplicationListener<WebServerInitializedEvent> {
implements AutoServiceRegistration, ApplicationContextAware, ApplicationListener<ApplicationEvent> {

private static final Log logger = LogFactory.getLog(AbstractAutoServiceRegistration.class);

Expand All @@ -63,6 +66,8 @@ public abstract class AbstractAutoServiceRegistration<R extends Registration>

private AtomicInteger port = new AtomicInteger(0);

private AtomicInteger mgmtPort = new AtomicInteger(0);

private AutoServiceRegistrationProperties properties;

@Deprecated
Expand All @@ -81,21 +86,25 @@ protected ApplicationContext getContext() {
}

@Override
@SuppressWarnings("deprecation")
public void onApplicationEvent(WebServerInitializedEvent event) {
bind(event);
public void onApplicationEvent(ApplicationEvent event) {
if (event instanceof ApplicationReadyEvent) {
this.start();
}
else if (event instanceof WebServerInitializedEvent) {
this.bind((WebServerInitializedEvent) event);
}
}

@Deprecated
public void bind(WebServerInitializedEvent event) {
ApplicationContext context = event.getApplicationContext();
if (context instanceof ConfigurableWebServerApplicationContext) {
if ("management".equals(((ConfigurableWebServerApplicationContext) context).getServerNamespace())) {
return;
}
String serverNamespace = event.getApplicationContext().getServerNamespace();

if (StringUtils.isEmpty(serverNamespace)) {
this.port.compareAndSet(0, event.getWebServer().getPort());
}
else if ("management".equals(serverNamespace)) {
this.mgmtPort.compareAndSet(0, event.getWebServer().getPort());
}
this.port.compareAndSet(0, event.getWebServer().getPort());
this.start();
}

@Override
Expand Down Expand Up @@ -185,7 +194,12 @@ protected String getManagementServiceName() {
*/
@Deprecated
protected Integer getManagementPort() {
return ManagementServerPortUtils.getPort(this.context);
if (this.mgmtPort.get() != 0) {
return this.mgmtPort.get();
}
else {
return ManagementServerPortUtils.getPort(this.context);
}
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@
*/
@RunWith(SpringRunner.class)
@SpringBootTest(classes = AbstractAutoServiceRegistrationMgmtDisabledTests.Config.class,
properties = { "management.port=0",
properties = { "management.server.port=0",
"spring.cloud.service-registry.auto-registration.register-management=false" },
webEnvironment = RANDOM_PORT)
public class AbstractAutoServiceRegistrationMgmtDisabledTests {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@
*/
@RunWith(SpringRunner.class)
// @checkstyle:off
@SpringBootTest(classes = AbstractAutoServiceRegistrationTests.Config.class, properties = "management.port=0",
@SpringBootTest(classes = AbstractAutoServiceRegistrationTests.Config.class, properties = "management.server.port=0",
webEnvironment = RANDOM_PORT)
// @checkstyle:on
public class AbstractAutoServiceRegistrationTests {
Expand Down

0 comments on commit c92a941

Please sign in to comment.