fix: Nacos integration with SpringBootAdmin.(2022.x) (#3318)
parent
ccbdfe60d1
commit
53d466fc4b
@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2013-2023 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
|
||||
*
|
||||
* https://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 com.alibaba.cloud.nacos.discovery;
|
||||
|
||||
import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled;
|
||||
import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
|
||||
import org.springframework.boot.autoconfigure.condition.AnyNestedCondition;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
|
||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||
import org.springframework.cloud.client.ConditionalOnBlockingDiscoveryEnabled;
|
||||
import org.springframework.cloud.client.ConditionalOnDiscoveryEnabled;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Conditional;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author xiaojing
|
||||
* @author echooymxq
|
||||
* @author ruansheng
|
||||
* @author zhangbin
|
||||
*/
|
||||
@Configuration(proxyBeanMethods = false)
|
||||
@ConditionalOnDiscoveryEnabled
|
||||
@ConditionalOnBlockingDiscoveryEnabled
|
||||
@ConditionalOnNacosDiscoveryEnabled
|
||||
@AutoConfigureAfter(value = NacosDiscoveryAutoConfiguration.class,
|
||||
name = "de.codecentric.boot.admin.server.cloud.config.AdminServerDiscoveryAutoConfiguration")
|
||||
public class NacosDiscoveryHeartBeatConfiguration {
|
||||
|
||||
/**
|
||||
* Nacos HeartBeat is no longer enabled by default .
|
||||
* publish an event every 30 seconds
|
||||
* see https://github.com/alibaba/spring-cloud-alibaba/issues/2868
|
||||
* see https://github.com/alibaba/spring-cloud-alibaba/issues/3258
|
||||
*/
|
||||
@Bean
|
||||
@ConditionalOnMissingBean
|
||||
@Conditional(NacosDiscoveryHeartBeatCondition.class)
|
||||
public NacosDiscoveryHeartBeatPublisher nacosDiscoveryHeartBeatPublisher(NacosDiscoveryProperties nacosDiscoveryProperties) {
|
||||
return new NacosDiscoveryHeartBeatPublisher(nacosDiscoveryProperties);
|
||||
}
|
||||
|
||||
private static class NacosDiscoveryHeartBeatCondition extends AnyNestedCondition {
|
||||
|
||||
NacosDiscoveryHeartBeatCondition() {
|
||||
super(ConfigurationPhase.REGISTER_BEAN);
|
||||
}
|
||||
|
||||
/**
|
||||
* Spring Cloud Gateway HeartBeat .
|
||||
*/
|
||||
@ConditionalOnProperty(value = "spring.cloud.gateway.discovery.locator.enabled", matchIfMissing = false)
|
||||
static class GatewayLocatorHeartBeatEnabled { }
|
||||
|
||||
/**
|
||||
* Spring Boot Admin HeartBeat .
|
||||
*/
|
||||
@ConditionalOnBean(type = "de.codecentric.boot.admin.server.cloud.discovery.InstanceDiscoveryListener")
|
||||
static class SpringBootAdminHeartBeatEnabled { }
|
||||
|
||||
/**
|
||||
* Nacos HeartBeat .
|
||||
*/
|
||||
@ConditionalOnProperty(value = "spring.cloud.nacos.discovery.heart-beat.enabled", matchIfMissing = false)
|
||||
static class NacosDiscoveryHeartBeatEnabled { }
|
||||
}
|
||||
|
||||
}
|
34
spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/GatewayLocatorHeartBeatPublisher.java → spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryHeartBeatPublisher.java
34
spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/GatewayLocatorHeartBeatPublisher.java → spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/discovery/NacosDiscoveryHeartBeatPublisher.java
@ -0,0 +1,72 @@
|
||||
/*
|
||||
* Copyright 2013-2023 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
|
||||
*
|
||||
* https://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 com.alibaba.cloud.nacos.discovery;
|
||||
|
||||
import com.alibaba.cloud.nacos.NacosServiceAutoConfiguration;
|
||||
import com.alibaba.cloud.nacos.registry.NacosServiceRegistryAutoConfiguration;
|
||||
import com.alibaba.cloud.nacos.util.UtilIPv6AutoConfiguration;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.autoconfigure.AutoConfigurations;
|
||||
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
|
||||
import org.springframework.cloud.client.serviceregistry.AutoServiceRegistrationConfiguration;
|
||||
import org.springframework.cloud.commons.util.UtilAutoConfiguration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* @author <a href="mailto:zhangbin1010@qq.com">zhangbin</a>
|
||||
**/
|
||||
public class NacosDiscoveryHeartBeatConfigurationTest {
|
||||
|
||||
private ApplicationContextRunner contextRunner = new ApplicationContextRunner()
|
||||
.withConfiguration(AutoConfigurations.of(
|
||||
AutoServiceRegistrationConfiguration.class,
|
||||
NacosServiceRegistryAutoConfiguration.class,
|
||||
UtilAutoConfiguration.class,
|
||||
UtilIPv6AutoConfiguration.class,
|
||||
NacosServiceAutoConfiguration.class,
|
||||
NacosDiscoveryAutoConfiguration.class,
|
||||
NacosDiscoveryClientConfiguration.class,
|
||||
NacosDiscoveryHeartBeatConfiguration.class, this.getClass()));
|
||||
|
||||
@Test
|
||||
public void testDefaultNacosDiscoveryHeartBeatPublisher() {
|
||||
contextRunner.run(context ->
|
||||
assertThat(context).doesNotHaveBean(NacosDiscoveryHeartBeatPublisher.class)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNacosDiscoveryHeartBeatPublisherEnabledForGateway() {
|
||||
contextRunner
|
||||
.withPropertyValues("spring.cloud.gateway.discovery.locator.enabled=true")
|
||||
.run(context ->
|
||||
assertThat(context).hasSingleBean(NacosDiscoveryHeartBeatPublisher.class)
|
||||
);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNacosDiscoveryHeartBeatPublisherEnabledForProperties() {
|
||||
contextRunner
|
||||
.withPropertyValues("spring.cloud.nacos.discovery.heart-beat.enabled=true")
|
||||
.run(context ->
|
||||
assertThat(context).hasSingleBean(NacosDiscoveryHeartBeatPublisher.class)
|
||||
);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue