1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

fix(nacos): Repair to create a large number of Nacos*Service problems

This commit is contained in:
chuntaojun 2019-11-06 21:26:55 +08:00
commit 935f50f9ab
34 changed files with 141 additions and 53 deletions

View File

@ -127,3 +127,7 @@ spring-cloud-alibaba@googlegroups.com欢迎通过此邮件列表讨论与 spr
![DingQR](https://img.alicdn.com/tfs/TB1zrRie4v1gK0jSZFFXXb0sXXa-7862-3570.png) ![DingQR](https://img.alicdn.com/tfs/TB1zrRie4v1gK0jSZFFXXb0sXXa-7862-3570.png)
如图片有问题,访问 https://img.alicdn.com/tfs/TB1zrRie4v1gK0jSZFFXXb0sXXa-7862-3570.png 如图片有问题,访问 https://img.alicdn.com/tfs/TB1zrRie4v1gK0jSZFFXXb0sXXa-7862-3570.png
## 社区相关开源
**[Nepxion Discovery](https://github.com/Nepxion/Discovery)**一款集成Spring Cloud Alibaba、Nacos、Sentinel等阿里巴巴中间件实现网关和服务的灰度发布、路由、权重、限流、熔断、降级、隔离、监控、追踪等功能的微服务开源解决。使用指南 请参考 **[Nepxion Discovery Guide](https://github.com/Nepxion/DiscoveryGuide)**。

View File

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<!DOCTYPE suppressions PUBLIC
"-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
"https://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
<suppress files="[\\/]spring-cloud-alibaba-examples[\\/]" checks="HideUtilityClassConstructorCheck" />
<suppress files=".*" checks="LineLength" />
</suppressions>

18
pom.xml
View File

@ -282,6 +282,24 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId> <artifactId>maven-checkstyle-plugin</artifactId>
<executions>
<execution>
<id>checkstyle-validation</id>
<phase>validate</phase>
<goals>
<goal>check</goal>
</goals>
<configuration>
<!-- Checkstyle rules inherited from spring-cloud-build -->
<suppressionsLocation>eclipse/checkstyle-suppressions.xml</suppressionsLocation>
<includeTestSourceDirectory>true</includeTestSourceDirectory>
<consoleOutput>true</consoleOutput>
<failsOnError>true</failsOnError>
<failOnViolation>true</failOnViolation>
<violationSeverity>warning</violationSeverity>
</configuration>
</execution>
</executions>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>

View File

@ -21,7 +21,7 @@
<sentinel.version>1.6.3</sentinel.version> <sentinel.version>1.6.3</sentinel.version>
<oss.version>3.1.0</oss.version> <oss.version>3.1.0</oss.version>
<seata.version>0.9.0</seata.version> <seata.version>0.9.0</seata.version>
<nacos.client.version>1.1.1</nacos.client.version> <nacos.client.version>1.1.4</nacos.client.version>
<nacos.config.version>0.8.0</nacos.config.version> <nacos.config.version>0.8.0</nacos.config.version>
<acm.version>1.0.9</acm.version> <acm.version>1.0.9</acm.version>
<ans.version>1.0.1</ans.version> <ans.version>1.0.1</ans.version>
@ -178,11 +178,6 @@
<artifactId>sentinel-reactor-adapter</artifactId> <artifactId>sentinel-reactor-adapter</artifactId>
<version>${sentinel.version}</version> <version>${sentinel.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>sentinel-dubbo-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba.csp</groupId> <groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-cluster-server-default</artifactId> <artifactId>sentinel-cluster-server-default</artifactId>
@ -307,6 +302,11 @@
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>${project.version}</version> <version>${project.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-circuitbreaker-sentinel</artifactId>
<version>${project.version}</version>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alicloud-oss</artifactId> <artifactId>spring-cloud-starter-alicloud-oss</artifactId>

View File

@ -505,6 +505,8 @@ public class DubboServiceDiscoveryAutoConfiguration {
private final NamingService namingService; private final NamingService namingService;
private final NacosDiscoveryProperties nacosDiscoveryProperties;
/** /**
* the set of services is listening. * the set of services is listening.
*/ */
@ -512,6 +514,7 @@ public class DubboServiceDiscoveryAutoConfiguration {
NacosConfiguration(NacosDiscoveryProperties nacosDiscoveryProperties) { NacosConfiguration(NacosDiscoveryProperties nacosDiscoveryProperties) {
this.namingService = nacosDiscoveryProperties.namingServiceInstance(); this.namingService = nacosDiscoveryProperties.namingServiceInstance();
this.nacosDiscoveryProperties = nacosDiscoveryProperties;
this.listeningServices = new ConcurrentSkipListSet<>(); this.listeningServices = new ConcurrentSkipListSet<>();
} }
@ -536,7 +539,8 @@ public class DubboServiceDiscoveryAutoConfiguration {
private void subscribeEventListener(String serviceName) { private void subscribeEventListener(String serviceName) {
if (listeningServices.add(serviceName)) { if (listeningServices.add(serviceName)) {
try { try {
namingService.subscribe(serviceName, event -> { String group = nacosDiscoveryProperties.getGroup();
namingService.subscribe(serviceName, group, event -> {
if (event instanceof NamingEvent) { if (event instanceof NamingEvent) {
NamingEvent namingEvent = (NamingEvent) event; NamingEvent namingEvent = (NamingEvent) event;
List<ServiceInstance> serviceInstances = hostToServiceInstanceList( List<ServiceInstance> serviceInstances = hostToServiceInstanceList(

View File

@ -390,11 +390,9 @@ public class DubboServiceMetadataRepository
return emptyList(); return emptyList();
} }
return hasText(protocol) return hasText(protocol) ? urls.stream()
? urls.stream() .filter(url -> url.getProtocol().equalsIgnoreCase(protocol))
.filter(url -> url.getProtocol().equalsIgnoreCase(protocol)) .collect(Collectors.toList()) : unmodifiableList(urls);
.collect(Collectors.toList())
: unmodifiableList(urls);
} }
/** /**

View File

@ -19,7 +19,7 @@ package com.alibaba.cloud.dubbo.autoconfigure;
import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.SpringBootTest;
/** /**
* {@link DubboServiceRegistrationAutoConfiguration} Test * {@link DubboServiceRegistrationAutoConfiguration} Test.
* *
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a> * @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
*/ */

View File

@ -26,7 +26,7 @@ import org.springframework.core.ResolvableType;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
/** /**
* {@link AbstractMediaTypeExpression} Test * {@link AbstractMediaTypeExpression} Test.
* *
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a> * @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
*/ */

View File

@ -35,6 +35,9 @@ import org.springframework.context.annotation.Bean;
@SpringBootApplication @SpringBootApplication
public class OssApplication { public class OssApplication {
/**
* Bucket Name of OSS Example.
*/
public static final String BUCKET_NAME = "spring-cloud-alibaba-test"; public static final String BUCKET_NAME = "spring-cloud-alibaba-test";
public static void main(String[] args) throws URISyntaxException { public static void main(String[] args) throws URISyntaxException {

View File

@ -20,14 +20,29 @@ import java.io.Serializable;
public class Order implements Serializable { public class Order implements Serializable {
/**
* order id.
*/
public long id; public long id;
/**
* user id.
*/
public String userId; public String userId;
/**
* commodity code.
*/
public String commodityCode; public String commodityCode;
/**
* count.
*/
public int count; public int count;
/**
* money.
*/
public int money; public int money;
@Override @Override

View File

@ -20,14 +20,29 @@ import java.io.Serializable;
public class Order implements Serializable { public class Order implements Serializable {
/**
* id.
*/
public long id; public long id;
/**
* user id.
*/
public String userId; public String userId;
/**
* commodity code.
*/
public String commodityCode; public String commodityCode;
/**
* count.
*/
public int count; public int count;
/**
* money.
*/
public int money; public int money;
@Override @Override

View File

@ -25,7 +25,11 @@ import org.springframework.http.client.ClientHttpRequestExecution;
/** /**
* @author fangjian * @author fangjian
*/ */
public class ExceptionUtil { public final class ExceptionUtil {
private ExceptionUtil() {
}
public static SentinelClientHttpResponse handleException(HttpRequest request, public static SentinelClientHttpResponse handleException(HttpRequest request,
byte[] body, ClientHttpRequestExecution execution, BlockException ex) { byte[] body, ClientHttpRequestExecution execution, BlockException ex) {

View File

@ -25,6 +25,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>sentinel-dubbo-api</artifactId> <artifactId>sentinel-dubbo-api</artifactId>
<version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>

View File

@ -25,6 +25,7 @@
<dependency> <dependency>
<groupId>com.alibaba.cloud</groupId> <groupId>com.alibaba.cloud</groupId>
<artifactId>sentinel-dubbo-api</artifactId> <artifactId>sentinel-dubbo-api</artifactId>
<version>${project.version}</version>
</dependency> </dependency>
<dependency> <dependency>
@ -41,7 +42,6 @@
<groupId>org.apache.dubbo</groupId> <groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId> <artifactId>dubbo</artifactId>
</dependency> </dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -33,7 +33,7 @@ public class EchoServiceFallback implements EchoService {
} }
/** /**
* 调用服务提供方的输出接口 * 调用服务提供方的输出接口.
* @param str 用户输入 * @param str 用户输入
* @return * @return
*/ */

View File

@ -33,9 +33,9 @@ import org.springframework.web.bind.annotation.PathVariable;
public interface EchoService { public interface EchoService {
/** /**
* 调用服务提供方的输出接口 * 调用服务提供方的输出接口.
* @param str 用户输入 * @param str 用户输入
* @return * @return echo result
*/ */
@GetMapping("/echo/{str}") @GetMapping("/echo/{str}")
String echo(@PathVariable("str") String str); String echo(@PathVariable("str") String str);

View File

@ -65,7 +65,7 @@ public class RocketMQBusApplication {
private ObjectMapper objectMapper; private ObjectMapper objectMapper;
/** /**
* Publish the {@link UserRemoteApplicationEvent} * Publish the {@link UserRemoteApplicationEvent}.
* @param name the user name * @param name the user name
* @param destination the destination * @param destination the destination
* @return If published * @return If published
@ -82,7 +82,7 @@ public class RocketMQBusApplication {
} }
/** /**
* Listener on the {@link UserRemoteApplicationEvent} * Listener on the {@link UserRemoteApplicationEvent}.
* @param event {@link UserRemoteApplicationEvent} * @param event {@link UserRemoteApplicationEvent}
*/ */
@EventListener @EventListener

View File

@ -23,7 +23,7 @@ import org.springframework.cloud.config.server.EnableConfigServer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
/** /**
* Nacos Config Server Bootstrap * Nacos Config Server Bootstrap.
* *
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a> * @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
* @since 0.2.0 * @since 0.2.0

View File

@ -37,7 +37,8 @@ public class NacosConfigBootstrapConfiguration {
} }
@Bean @Bean
public NacosPropertySourceLocator nacosPropertySourceLocator(NacosConfigProperties nacosConfigProperties) { public NacosPropertySourceLocator nacosPropertySourceLocator(
NacosConfigProperties nacosConfigProperties) {
return new NacosPropertySourceLocator(nacosConfigProperties); return new NacosPropertySourceLocator(nacosConfigProperties);
} }

View File

@ -363,8 +363,10 @@ public class NacosConfigProperties {
public ConfigService configServiceInstance() { public ConfigService configServiceInstance() {
if (null == configService) { if (null == configService) {
try { try {
configService = NacosFactory.createConfigService(getConfigServiceProperties()); configService = NacosFactory
} catch (NacosException e) { .createConfigService(getConfigServiceProperties());
}
catch (NacosException e) {
log.error("create naming service error!properties={},e=,", this, e); log.error("create naming service error!properties={},e=,", this, e);
return null; return null;
} }

View File

@ -51,7 +51,8 @@ public class NacosConfigEndpointAutoConfiguration {
@Bean @Bean
public NacosConfigHealthIndicator nacosConfigHealthIndicator() { public NacosConfigHealthIndicator nacosConfigHealthIndicator() {
return new NacosConfigHealthIndicator(nacosConfigProperties.configServiceInstance()); return new NacosConfigHealthIndicator(
nacosConfigProperties.configServiceInstance());
} }
} }

View File

@ -120,8 +120,8 @@ public class NacosServiceRegistry implements ServiceRegistry<Registration> {
} }
try { try {
nacosDiscoveryProperties.namingMaintainServiceInstance().updateInstance(serviceId, nacosDiscoveryProperties.namingMaintainServiceInstance()
instance); .updateInstance(serviceId, instance);
} }
catch (Exception e) { catch (Exception e) {
throw new RuntimeException("update nacos instance status fail", e); throw new RuntimeException("update nacos instance status fail", e);

View File

@ -46,16 +46,17 @@ import org.springframework.context.annotation.Configuration;
public class NacosServiceRegistryAutoConfiguration { public class NacosServiceRegistryAutoConfiguration {
@Bean @Bean
public NacosServiceRegistry nacosServiceRegistry(NacosDiscoveryProperties nacosDiscoveryProperties) { public NacosServiceRegistry nacosServiceRegistry(
NacosDiscoveryProperties nacosDiscoveryProperties) {
return new NacosServiceRegistry(nacosDiscoveryProperties); return new NacosServiceRegistry(nacosDiscoveryProperties);
} }
@Bean @Bean
@ConditionalOnBean(AutoServiceRegistrationProperties.class) @ConditionalOnBean(AutoServiceRegistrationProperties.class)
public NacosRegistration nacosRegistration(NacosDiscoveryProperties nacosDiscoveryProperties, public NacosRegistration nacosRegistration(
NacosDiscoveryProperties nacosDiscoveryProperties,
ApplicationContext context) { ApplicationContext context) {
return new NacosRegistration(nacosDiscoveryProperties, return new NacosRegistration(nacosDiscoveryProperties, context);
context);
} }
@Bean @Bean

View File

@ -37,8 +37,7 @@ public class NacosRibbonClientConfiguration {
@ConditionalOnMissingBean @ConditionalOnMissingBean
public ServerList<?> ribbonServerList(IClientConfig config, public ServerList<?> ribbonServerList(IClientConfig config,
NacosDiscoveryProperties nacosDiscoveryProperties) { NacosDiscoveryProperties nacosDiscoveryProperties) {
NacosServerList serverList = new NacosServerList( NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
nacosDiscoveryProperties);
serverList.initWithNiwsConfig(config); serverList.initWithNiwsConfig(config);
return serverList; return serverList;
} }

View File

@ -54,7 +54,8 @@ public class NacosRule extends AbstractLoadBalancerRule {
DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer(); DynamicServerListLoadBalancer loadBalancer = (DynamicServerListLoadBalancer) getLoadBalancer();
String name = loadBalancer.getName(); String name = loadBalancer.getName();
NamingService namingService = nacosDiscoveryProperties.namingServiceInstance(); NamingService namingService = nacosDiscoveryProperties
.namingServiceInstance();
List<Instance> instances = namingService.selectInstances(name, true); List<Instance> instances = namingService.selectInstances(name, true);
if (CollectionUtils.isEmpty(instances)) { if (CollectionUtils.isEmpty(instances)) {
LOGGER.warn("no instance in service {}", name); LOGGER.warn("no instance in service {}", name);

View File

@ -68,7 +68,8 @@ public class NacosServiceDiscoveryTest {
when(namingService.selectInstances(eq(serviceName), eq("DEFAULT"), eq(true))) when(namingService.selectInstances(eq(serviceName), eq("DEFAULT"), eq(true)))
.thenReturn(instances); .thenReturn(instances);
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(nacosDiscoveryProperties); NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
nacosDiscoveryProperties);
List<ServiceInstance> serviceInstances = serviceDiscovery List<ServiceInstance> serviceInstances = serviceDiscovery
.getInstances(serviceName); .getInstances(serviceName);
@ -106,7 +107,8 @@ public class NacosServiceDiscoveryTest {
when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE), when(namingService.getServicesOfServer(eq(1), eq(Integer.MAX_VALUE),
eq("DEFAULT"))).thenReturn(nacosServices); eq("DEFAULT"))).thenReturn(nacosServices);
NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(nacosDiscoveryProperties); NacosServiceDiscovery serviceDiscovery = new NacosServiceDiscovery(
nacosDiscoveryProperties);
List<String> services = serviceDiscovery.getServices(); List<String> services = serviceDiscovery.getServices();

View File

@ -176,13 +176,13 @@ public class NacosAutoServiceRegistrationTests {
} }
private void checkoutEndpoint() throws Exception { private void checkoutEndpoint() throws Exception {
NacosDiscoveryEndpoint nacosDiscoveryEndpoint = new NacosDiscoveryEndpoint(properties); NacosDiscoveryEndpoint nacosDiscoveryEndpoint = new NacosDiscoveryEndpoint(
properties);
Map<String, Object> map = nacosDiscoveryEndpoint.nacosDiscovery(); Map<String, Object> map = nacosDiscoveryEndpoint.nacosDiscovery();
assertThat(properties).isEqualTo(map.get("NacosDiscoveryProperties")); assertThat(properties).isEqualTo(map.get("NacosDiscoveryProperties"));
assertThat( assertThat(properties.namingServiceInstance().getSubscribeServices().toString())
properties.namingServiceInstance().getSubscribeServices().toString()) .isEqualTo(map.get("subscribe").toString());
.isEqualTo(map.get("subscribe").toString());
} }
@Configuration @Configuration

View File

@ -53,8 +53,7 @@ public class NacosServerListTests {
when(namingService.selectInstances(anyString(), eq("DEFAULT"), eq(true))) when(namingService.selectInstances(anyString(), eq("DEFAULT"), eq(true)))
.thenReturn(null); .thenReturn(null);
NacosServerList serverList = new NacosServerList( NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
nacosDiscoveryProperties);
List<NacosServer> servers = serverList.getInitialListOfServers(); List<NacosServer> servers = serverList.getInitialListOfServers();
assertThat(servers).isEmpty(); assertThat(servers).isEmpty();
} }
@ -80,8 +79,7 @@ public class NacosServerListTests {
IClientConfig clientConfig = mock(IClientConfig.class); IClientConfig clientConfig = mock(IClientConfig.class);
when(clientConfig.getClientName()).thenReturn("test-service"); when(clientConfig.getClientName()).thenReturn("test-service");
NacosServerList serverList = new NacosServerList( NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
nacosDiscoveryProperties);
serverList.initWithNiwsConfig(clientConfig); serverList.initWithNiwsConfig(clientConfig);
List<NacosServer> servers = serverList.getInitialListOfServers(); List<NacosServer> servers = serverList.getInitialListOfServers();
assertThat(servers).hasSize(1); assertThat(servers).hasSize(1);
@ -115,8 +113,7 @@ public class NacosServerListTests {
IClientConfig clientConfig = mock(IClientConfig.class); IClientConfig clientConfig = mock(IClientConfig.class);
when(clientConfig.getClientName()).thenReturn("test-service"); when(clientConfig.getClientName()).thenReturn("test-service");
NacosServerList serverList = new NacosServerList( NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
nacosDiscoveryProperties);
serverList.initWithNiwsConfig(clientConfig); serverList.initWithNiwsConfig(clientConfig);
List<NacosServer> servers = serverList.getInitialListOfServers(); List<NacosServer> servers = serverList.getInitialListOfServers();
assertThat(servers).hasSize(1); assertThat(servers).hasSize(1);
@ -154,8 +151,7 @@ public class NacosServerListTests {
IClientConfig clientConfig = mock(IClientConfig.class); IClientConfig clientConfig = mock(IClientConfig.class);
when(clientConfig.getClientName()).thenReturn("test-service"); when(clientConfig.getClientName()).thenReturn("test-service");
NacosServerList serverList = new NacosServerList( NacosServerList serverList = new NacosServerList(nacosDiscoveryProperties);
nacosDiscoveryProperties);
serverList.initWithNiwsConfig(clientConfig); serverList.initWithNiwsConfig(clientConfig);
List<NacosServer> servers = serverList.getUpdatedListOfServers(); List<NacosServer> servers = serverList.getUpdatedListOfServers();

View File

@ -24,7 +24,11 @@ import com.alibaba.nacos.api.naming.pojo.Instance;
/** /**
* @author xiaojing * @author xiaojing
*/ */
public class NacosMockTest { public final class NacosMockTest {
private NacosMockTest() {
}
public static Instance serviceInstance(String serviceName, boolean isHealthy, public static Instance serviceInstance(String serviceName, boolean isHealthy,
Map<String, String> metadata) { Map<String, String> metadata) {

View File

@ -16,12 +16,14 @@
package com.alibaba.cloud.seata.web; package com.alibaba.cloud.seata.web;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/** /**
* @author xiaojing * @author xiaojing
*/ */
@ConditionalOnWebApplication
public class SeataHandlerInterceptorConfiguration implements WebMvcConfigurer { public class SeataHandlerInterceptorConfiguration implements WebMvcConfigurer {
@Override @Override

View File

@ -30,6 +30,11 @@
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-circuitbreaker-sentinel</artifactId>
</dependency>
<dependency> <dependency>
<groupId>com.alibaba.csp</groupId> <groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-apache-dubbo-adapter</artifactId> <artifactId>sentinel-apache-dubbo-adapter</artifactId>

View File

@ -37,7 +37,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* Add this unit test to verify https://github.com/alibaba/spring-cloud-alibaba/pull/838 * Add this unit test to verify https://github.com/alibaba/spring-cloud-alibaba/pull/838.
* *
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a> * @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
*/ */

View File

@ -23,7 +23,11 @@ import com.alibaba.ans.shaded.com.taobao.vipserver.client.core.Host;
/** /**
* @author xiaojing * @author xiaojing
*/ */
public class AnsMockTest { public final class AnsMockTest {
private AnsMockTest() {
}
public static Host hostInstance(String serviceName, boolean valid, public static Host hostInstance(String serviceName, boolean valid,
Map<String, String> metadata) { Map<String, String> metadata) {

View File

@ -27,7 +27,7 @@ import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
/** /**
* {@link OSS} {@link OssProperties} Test * {@link OSS} {@link OssProperties} Test.
* *
* @author <a href="mailto:fangjian0423@gmail.com">Jim</a> * @author <a href="mailto:fangjian0423@gmail.com">Jim</a>
*/ */