diff --git a/spring-cloud-alibaba-starters/pom.xml b/spring-cloud-alibaba-starters/pom.xml index c3f083989..1249b019e 100644 --- a/spring-cloud-alibaba-starters/pom.xml +++ b/spring-cloud-alibaba-starters/pom.xml @@ -22,7 +22,6 @@ spring-cloud-starter-stream-rocketmq spring-cloud-starter-bus-rocketmq spring-cloud-starter-dubbo - spring-cloud-starter-dubbo-gateway spring-cloud-starter-alibaba-sidecar spring-cloud-circuitbreaker-sentinel spring-cloud-starter-alibaba-sentinel diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java index 27f6fe7f4..75912ca45 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistration.java @@ -17,6 +17,7 @@ package com.alibaba.cloud.nacos.registry; import java.net.URI; +import java.util.List; import java.util.Map; import javax.annotation.PostConstruct; @@ -57,12 +58,16 @@ public class NacosRegistration implements Registration, ServiceInstance { */ public static final String MANAGEMENT_ENDPOINT_BASE_PATH = "management.endpoints.web.base-path"; + private List registrationCustomizers; + private NacosDiscoveryProperties nacosDiscoveryProperties; private ApplicationContext context; - public NacosRegistration(NacosDiscoveryProperties nacosDiscoveryProperties, + public NacosRegistration(List registrationCustomizers, + NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { + this.registrationCustomizers = registrationCustomizers; this.nacosDiscoveryProperties = nacosDiscoveryProperties; this.context = context; } @@ -104,6 +109,17 @@ public class NacosRegistration implements Registration, ServiceInstance { metadata.put(PreservedMetadataKeys.IP_DELETE_TIMEOUT, nacosDiscoveryProperties.getIpDeleteTimeout().toString()); } + customize(registrationCustomizers, this); + } + + private static void customize( + List registrationCustomizers, + NacosRegistration registration) { + if (registrationCustomizers != null) { + for (NacosRegistrationCustomizer customizer : registrationCustomizers) { + customizer.customize(registration); + } + } } @Override diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayConstants.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizer.java similarity index 61% rename from spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayConstants.java rename to spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizer.java index e60e8663e..e04376022 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayConstants.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizer.java @@ -14,21 +14,17 @@ * limitations under the License. */ -package com.alibaba.cloud.dubbo.gateway; - -import com.alibaba.cloud.dubbo.util.DubboCloudConstants; +package com.alibaba.cloud.nacos.registry; /** - * The constants of Dubbo Cloud Gateway. - * - * @author Mercy + * @author L.cm */ -public abstract class DubboCloudGatewayConstants { +public interface NacosRegistrationCustomizer { /** - * The property prefix of Configuration. + * customize NacosRegistration. + * @param registration NacosRegistration */ - public static final String CONFIG_PROPERTY_PREFIX = DubboCloudConstants.CONFIG_PROPERTY_PREFIX - + ".gateway"; + void customize(NacosRegistration registration); } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java index 2bfdfb250..854b77729 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/main/java/com/alibaba/cloud/nacos/registry/NacosServiceRegistryAutoConfiguration.java @@ -16,11 +16,14 @@ package com.alibaba.cloud.nacos.registry; +import java.util.List; + import com.alibaba.cloud.nacos.ConditionalOnNacosDiscoveryEnabled; import com.alibaba.cloud.nacos.NacosDiscoveryProperties; import com.alibaba.cloud.nacos.NacosServiceManager; import com.alibaba.cloud.nacos.discovery.NacosDiscoveryAutoConfiguration; +import org.springframework.beans.factory.ObjectProvider; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; @@ -56,9 +59,11 @@ public class NacosServiceRegistryAutoConfiguration { @Bean @ConditionalOnBean(AutoServiceRegistrationProperties.class) public NacosRegistration nacosRegistration( + ObjectProvider> registrationCustomizers, NacosDiscoveryProperties nacosDiscoveryProperties, ApplicationContext context) { - return new NacosRegistration(nacosDiscoveryProperties, context); + return new NacosRegistration(registrationCustomizers.getIfAvailable(), + nacosDiscoveryProperties, context); } @Bean diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java new file mode 100644 index 000000000..139e9f812 --- /dev/null +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-nacos-discovery/src/test/java/com/alibaba/cloud/nacos/registry/NacosRegistrationCustomizerTest.java @@ -0,0 +1,104 @@ +/* + * Copyright 2013-2018 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.registry; + +import java.lang.reflect.InvocationHandler; +import java.lang.reflect.Method; +import java.util.Map; +import java.util.Properties; + +import com.alibaba.cloud.nacos.discovery.NacosDiscoveryClientConfiguration; +import com.alibaba.nacos.api.NacosFactory; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.api.support.MethodProxy; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.modules.junit4.PowerMockRunnerDelegate; + +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.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.test.context.junit4.SpringRunner; + +import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.RANDOM_PORT; + +/** + * @author L.cm + */ +@RunWith(PowerMockRunner.class) +@PowerMockIgnore("javax.management.*") +@PowerMockRunnerDelegate(SpringRunner.class) +@PrepareForTest({ NacosFactory.class }) +@SpringBootTest(classes = NacosRegistrationCustomizerTest.TestConfig.class, + properties = { "spring.application.name=myTestService1", + "spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848" }, + webEnvironment = RANDOM_PORT) +public class NacosRegistrationCustomizerTest { + + @Autowired + private NacosAutoServiceRegistration nacosAutoServiceRegistration; + + static { + try { + Method method = PowerMockito.method(NacosFactory.class, "createNamingService", + Properties.class); + MethodProxy.proxy(method, new InvocationHandler() { + @Override + public Object invoke(Object proxy, Method method, Object[] args) + throws Throwable { + return new MockNamingService(); + } + }); + } + catch (Exception e) { + e.printStackTrace(); + } + } + + @Test + public void contextLoads() throws Exception { + NacosRegistration registration = nacosAutoServiceRegistration.getRegistration(); + Map metadata = registration.getMetadata(); + Assert.assertEquals("test1", metadata.get("test1")); + } + + @Configuration + @EnableAutoConfiguration + @ImportAutoConfiguration({ AutoServiceRegistrationConfiguration.class, + NacosDiscoveryClientConfiguration.class, + NacosServiceRegistryAutoConfiguration.class }) + public static class TestConfig { + + @Bean + public NacosRegistrationCustomizer nacosRegistrationCustomizer() { + return registration -> { + Map metadata = registration.getMetadata(); + metadata.put("test1", "test1"); + }; + } + + } + +} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java index 39b43408c..996a483b7 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicator.java @@ -105,7 +105,7 @@ public class SentinelHealthIndicator extends AbstractHealthIndicator { // If failed to send heartbeat message, means that the Dashboard is DOWN dashboardUp = false; detailMap.put("dashboard", - new Status(Status.DOWN.getCode(), String.format( + new Status(Status.UNKNOWN.getCode(), String.format( "the dashboard servers [%s] one of them can't be connected", consoleServerList))); } @@ -138,7 +138,7 @@ public class SentinelHealthIndicator extends AbstractHealthIndicator { // DOWN dataSourceUp = false; dataSourceDetailMap.put(dataSourceBeanName, - new Status(Status.DOWN.getCode(), e.getMessage())); + new Status(Status.UNKNOWN.getCode(), e.getMessage())); } } @@ -147,7 +147,7 @@ public class SentinelHealthIndicator extends AbstractHealthIndicator { builder.up().withDetails(detailMap); } else { - builder.down().withDetails(detailMap); + builder.unknown().withDetails(detailMap); } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicatorTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicatorTests.java index b8d68d522..71ddb799b 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicatorTests.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/endpoint/SentinelHealthIndicatorTests.java @@ -109,9 +109,9 @@ public class SentinelHealthIndicatorTests { Health health = sentinelHealthIndicator.health(); - assertThat(health.getStatus()).isEqualTo(Status.DOWN); - assertThat(health.getDetails().get("dashboard")).isEqualTo( - new Status(Status.DOWN.getCode(), "localhost:8080 can't be connected")); + assertThat(health.getStatus()).isEqualTo(Status.UNKNOWN); + assertThat(health.getDetails().get("dashboard")).isEqualTo(new Status( + Status.UNKNOWN.getCode(), "localhost:8080 can't be connected")); } @Test @@ -163,13 +163,13 @@ public class SentinelHealthIndicatorTests { Health health = sentinelHealthIndicator.health(); - assertThat(health.getStatus()).isEqualTo(Status.DOWN); + assertThat(health.getStatus()).isEqualTo(Status.UNKNOWN); Map dataSourceDetailMap = (Map) health .getDetails().get("dataSource"); assertThat(dataSourceDetailMap.get("ds1-sentinel-file-datasource")) .isEqualTo(Status.UP); assertThat(dataSourceDetailMap.get("ds2-sentinel-file-datasource")) - .isEqualTo(new Status(Status.DOWN.getCode(), "fileDataSource2 error")); + .isEqualTo(new Status(Status.UNKNOWN.getCode(), "fileDataSource2 error")); } } diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/pom.xml b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/pom.xml deleted file mode 100644 index 2b94e06cf..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/pom.xml +++ /dev/null @@ -1,167 +0,0 @@ - - - - - com.alibaba.cloud - spring-cloud-alibaba-starters - ${revision} - ../pom.xml - - - 4.0.0 - - spring-cloud-starter-dubbo-gateway - Spring Cloud Starter Dubbo Gateway - - - - - - org.springframework.boot - spring-boot-starter - true - - - - org.springframework.boot - spring-boot-actuator - true - - - - org.springframework.boot - spring-boot-actuator-autoconfigure - true - - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - org.springframework.boot - spring-boot - true - - - - org.springframework.boot - spring-boot-autoconfigure - true - - - - - org.springframework.cloud - spring-cloud-commons - true - - - - org.springframework.cloud - spring-cloud-context - true - - - - - - - - - - - - org.springframework.cloud - spring-cloud-starter-gateway - true - - - - - com.alibaba.cloud - spring-cloud-starter-dubbo - - - - org.apache.commons - commons-lang3 - 3.11 - - - - - org.springframework - spring-test - test - - - - org.springframework.boot - spring-boot-test - test - - - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - test - - - - - org.springframework.cloud - spring-cloud-starter-zookeeper-discovery - ${spring-cloud-zookeeper.version} - test - - - org.apache.zookeeper - zookeeper - - - - - - org.apache.zookeeper - zookeeper - 3.4.14 - test - - - org.slf4j - slf4j-log4j12 - - - - - - org.apache.curator - curator-framework - ${curator.version} - test - - - - - org.springframework.cloud - spring-cloud-starter-consul-discovery - ${spring-cloud-consul.version} - test - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - test - - - - - \ No newline at end of file diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayExecutor.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayExecutor.java deleted file mode 100644 index 016c7e614..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayExecutor.java +++ /dev/null @@ -1,164 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway; - -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - -import com.alibaba.cloud.dubbo.http.MutableHttpServerRequest; -import com.alibaba.cloud.dubbo.metadata.DubboRestServiceMetadata; -import com.alibaba.cloud.dubbo.metadata.RequestMetadata; -import com.alibaba.cloud.dubbo.metadata.RestMethodMetadata; -import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; -import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContext; -import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; -import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.apache.dubbo.rpc.service.GenericException; -import org.apache.dubbo.rpc.service.GenericService; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.core.convert.ConversionService; -import org.springframework.format.support.DefaultFormattingConversionService; -import org.springframework.http.HttpRequest; - -import static com.alibaba.cloud.dubbo.http.util.HttpUtils.getParameters; -import static org.apache.commons.lang3.StringUtils.substringAfter; -import static org.apache.commons.lang3.StringUtils.substringBetween; -import static org.apache.dubbo.common.constants.CommonConstants.PATH_SEPARATOR; - -/** - * The executor of Dubbo Cloud Gateway that handles the HTTP request and responses the - * result of execution of the generic invocation to the Dubbo service providers. - * - * @author Mercy - * - */ -public class DubboCloudGatewayExecutor { - - private final Log logger = LogFactory.getLog(getClass()); - - private final DubboServiceMetadataRepository repository; - - private final DubboGenericServiceFactory serviceFactory; - - private final DubboGenericServiceExecutionContextFactory contextFactory; - - private final DubboCloudGatewayProperties dubboCloudGatewayProperties; - - private final ConversionService conversionService; - - private final Map dubboTranslatedAttributes = new HashMap<>(); - - public DubboCloudGatewayExecutor(DubboServiceMetadataRepository repository, - DubboGenericServiceFactory serviceFactory, - DubboGenericServiceExecutionContextFactory contextFactory, - DubboCloudGatewayProperties dubboCloudGatewayProperties, - ObjectProvider conversionService) { - this.repository = repository; - this.serviceFactory = serviceFactory; - this.contextFactory = contextFactory; - this.dubboCloudGatewayProperties = dubboCloudGatewayProperties; - this.conversionService = conversionService - .getIfAvailable(DefaultFormattingConversionService::new); - // TODO : Replace these hard-code configurations - this.dubboTranslatedAttributes.put("protocol", "dubbo"); - this.dubboTranslatedAttributes.put("cluster", "failover"); - } - - public Object execute(HttpRequest request) { - - String serviceName = resolveServiceName(request); - - String restPath = substringAfter(request.getURI().getPath(), serviceName); - - // 初始化 serviceName 的 REST 请求元数据 - repository.initializeMetadata(serviceName); - // 将 HttpServletRequest 转化为 RequestMetadata - RequestMetadata clientMetadata = buildRequestMetadata(request, restPath); - - DubboRestServiceMetadata dubboRestServiceMetadata = repository.get(serviceName, - clientMetadata); - - Object result = null; - - if (dubboRestServiceMetadata != null) { - - RestMethodMetadata dubboRestMethodMetadata = dubboRestServiceMetadata - .getRestMethodMetadata(); - - GenericService genericService = serviceFactory - .create(dubboRestServiceMetadata, dubboTranslatedAttributes); - - byte[] body = getRequestBody(request); - - MutableHttpServerRequest httpServerRequest = new MutableHttpServerRequest( - request, body); - - DubboGenericServiceExecutionContext context = contextFactory - .create(dubboRestMethodMetadata, httpServerRequest); - - GenericException exception = null; - - try { - result = genericService.$invoke(context.getMethodName(), - context.getParameterTypes(), context.getParameters()); - - String returnType = dubboRestMethodMetadata.getReturnType(); - - logger.info("The result is " + result); - - } - catch (GenericException e) { - exception = e; - } - } - - return result; - - } - - private String resolveServiceName(HttpRequest request) { - URI uri = request.getURI(); - String requestURI = uri.getPath(); - String servletPath = dubboCloudGatewayProperties.getContextPath(); - String part = substringAfter(requestURI, servletPath); - String serviceName = substringBetween(part, PATH_SEPARATOR, PATH_SEPARATOR); - return serviceName; - } - - /** - * TODO : Get the Request Body from HttpRequest. - * @param request {@link HttpRequest} - * @return - */ - private byte[] getRequestBody(HttpRequest request) { - return new byte[0]; - } - - private RequestMetadata buildRequestMetadata(HttpRequest request, String restPath) { - RequestMetadata requestMetadata = new RequestMetadata(); - requestMetadata.setPath(restPath); - requestMetadata.setMethod(request.getMethod().toString()); - requestMetadata.setParams(getParameters(request)); - requestMetadata.setHeaders(request.getHeaders()); - return requestMetadata; - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayProperties.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayProperties.java deleted file mode 100644 index 6ac477599..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/DubboCloudGatewayProperties.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -import static com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayConstants.CONFIG_PROPERTY_PREFIX; - -/** - * The Configuration Properties for Dubbo Cloud Gateway. - * - * @author Mercy - */ -@ConfigurationProperties(prefix = CONFIG_PROPERTY_PREFIX) -public class DubboCloudGatewayProperties { - - /** - * Enabled or not. - */ - private boolean enabled = true; - - /** - * The context path for the gateway request mapping. - */ - private String contextPath = ""; - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public String getContextPath() { - return contextPath; - } - - public void setContextPath(String contextPath) { - this.contextPath = contextPath; - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboCloudGatewayAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboCloudGatewayAutoConfiguration.java deleted file mode 100644 index 81fdf2b5f..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboCloudGatewayAutoConfiguration.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway.autoconfigure; - -import com.alibaba.cloud.dubbo.autoconfigure.DubboMetadataAutoConfiguration; -import com.alibaba.cloud.dubbo.autoconfigure.DubboServiceAutoConfiguration; -import com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayExecutor; -import com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayProperties; -import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; -import com.alibaba.cloud.dubbo.service.DubboGenericServiceExecutionContextFactory; -import com.alibaba.cloud.dubbo.service.DubboGenericServiceFactory; - -import org.springframework.beans.factory.ObjectProvider; -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.convert.ConversionService; - -@Configuration(proxyBeanMethods = false) -@ConditionalOnProperty(prefix = "dubbo.cloud.gateway", name = "enabled", - havingValue = "true", matchIfMissing = true) -@AutoConfigureAfter({ DubboServiceAutoConfiguration.class, - DubboMetadataAutoConfiguration.class }) -@EnableConfigurationProperties(DubboCloudGatewayProperties.class) -public class DubboCloudGatewayAutoConfiguration { - - @Bean - @ConditionalOnMissingBean(DubboCloudGatewayExecutor.class) - public DubboCloudGatewayExecutor dubboCloudGatewayExecutor( - DubboServiceMetadataRepository repository, - DubboGenericServiceFactory serviceFactory, - DubboGenericServiceExecutionContextFactory contextFactory, - DubboCloudGatewayProperties dubboCloudGatewayProperties, - ObjectProvider conversionServices) { - return new DubboCloudGatewayExecutor(repository, serviceFactory, contextFactory, - dubboCloudGatewayProperties, conversionServices); - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboSpringCloudGatewayAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboSpringCloudGatewayAutoConfiguration.java deleted file mode 100644 index 3865a69aa..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/autoconfigure/DubboSpringCloudGatewayAutoConfiguration.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway.autoconfigure; - -import com.alibaba.cloud.dubbo.autoconfigure.DubboMetadataAutoConfiguration; -import com.alibaba.cloud.dubbo.autoconfigure.DubboServiceAutoConfiguration; -import com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayExecutor; -import com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayProperties; -import com.alibaba.cloud.dubbo.gateway.bootstrap.DubboSpringCloudGatewayFilter; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import org.springframework.boot.autoconfigure.AutoConfigureAfter; -import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.cloud.gateway.route.RouteLocator; -import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.http.codec.ServerCodecConfigurer; -import org.springframework.http.codec.support.DefaultServerCodecConfigurer; - -/** - * The Auto-{@link Configuration} of Dubbo Spring Cloud Gateway. - * - * @author Mercy - */ -@Configuration(proxyBeanMethods = false) -@ConditionalOnClass(GlobalFilter.class) -@ConditionalOnProperty(prefix = "dubbo.cloud.gateway", name = "enabled", - havingValue = "true", matchIfMissing = true) -@AutoConfigureAfter({ DubboServiceAutoConfiguration.class, - DubboMetadataAutoConfiguration.class, DubboCloudGatewayAutoConfiguration.class }) -@EnableConfigurationProperties(DubboCloudGatewayProperties.class) -public class DubboSpringCloudGatewayAutoConfiguration { - - private final Log logger = LogFactory.getLog(getClass()); - - @Bean - @ConditionalOnMissingBean(ServerCodecConfigurer.class) - public ServerCodecConfigurer serverCodecConfigurer() { - return new DefaultServerCodecConfigurer(); - } - - @Bean - public DubboSpringCloudGatewayFilter dubboSpringCloudGatewayFilter( - DubboCloudGatewayExecutor dubboCloudGatewayExecutor) { - return new DubboSpringCloudGatewayFilter(dubboCloudGatewayExecutor); - } - - @Bean - public RouteLocator gatewayRoutes(RouteLocatorBuilder builder) { - return builder.routes() - .route(r -> r.path("/**").uri("http://localhost:9090").id("first")) - .build(); - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayFilter.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayFilter.java deleted file mode 100644 index 4c352c25e..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayFilter.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway.bootstrap; - -import com.alibaba.cloud.dubbo.gateway.DubboCloudGatewayExecutor; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import reactor.core.publisher.Mono; - -import org.springframework.cloud.gateway.filter.GatewayFilter; -import org.springframework.cloud.gateway.filter.GatewayFilterChain; -import org.springframework.cloud.gateway.filter.GlobalFilter; -import org.springframework.core.Ordered; -import org.springframework.http.server.reactive.ServerHttpResponse; -import org.springframework.web.server.ServerWebExchange; - -/** - * The Spring Cloud {@link GatewayFilter Gateway Filter} for Dubbo. - * - * @author Mercy - */ -public class DubboSpringCloudGatewayFilter - implements GatewayFilter, GlobalFilter, Ordered { - - private final Log logger = LogFactory.getLog(getClass()); - - private int order; - - private final DubboCloudGatewayExecutor dubboCloudGatewayExecutor; - - public DubboSpringCloudGatewayFilter( - DubboCloudGatewayExecutor dubboCloudGatewayExecutor) { - this.dubboCloudGatewayExecutor = dubboCloudGatewayExecutor; - } - - @Override - public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) { - - Object result = dubboCloudGatewayExecutor.execute(exchange.getRequest()); - - if (result == null) { - chain.filter(exchange); - } - else { - ServerHttpResponse response = exchange.getResponse(); - } - - return Mono.empty(); - } - - public void setOrder(int order) { - this.order = order; - } - - @Override - public int getOrder() { - return order; - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/resources/META-INF/spring.factories deleted file mode 100644 index 915e8fa29..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/main/resources/META-INF/spring.factories +++ /dev/null @@ -1,3 +0,0 @@ -org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ -com.alibaba.cloud.dubbo.gateway.autoconfigure.DubboCloudGatewayAutoConfiguration,\ -com.alibaba.cloud.dubbo.gateway.autoconfigure.DubboSpringCloudGatewayAutoConfiguration \ No newline at end of file diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayBootstrap.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayBootstrap.java deleted file mode 100644 index b62180a7d..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/java/com/alibaba/cloud/dubbo/gateway/bootstrap/DubboSpringCloudGatewayBootstrap.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * Copyright 2013-2018 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.dubbo.gateway.bootstrap; - -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.builder.SpringApplicationBuilder; -import org.springframework.cloud.client.discovery.EnableDiscoveryClient; - -/** - * The bootstrap class of Dubbo Spring Cloud Gateway. - * - * @author Mercy - */ -@EnableAutoConfiguration -@EnableDiscoveryClient -public final class DubboSpringCloudGatewayBootstrap { - - private DubboSpringCloudGatewayBootstrap() { - } - - public static void main(String[] args) { - new SpringApplicationBuilder(DubboSpringCloudGatewayBootstrap.class) - .properties("spring.profiles.active=nacos").run(args); - } - -} diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/application.yaml b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/application.yaml deleted file mode 100644 index ef0a53a4a..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/application.yaml +++ /dev/null @@ -1,7 +0,0 @@ -dubbo: - protocols: - dubbo: - port: -1 - -server: - port: 9090 \ No newline at end of file diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/bootstrap.yaml b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/bootstrap.yaml deleted file mode 100644 index f47438672..000000000 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo-gateway/src/test/resources/bootstrap.yaml +++ /dev/null @@ -1,66 +0,0 @@ -spring: - application: - name: spring-cloud-alibaba-dubbo-gateway - main: - allow-bean-definition-overriding: true - - - # default disable all - cloud: - nacos: - username: nacos - password: nacos - discovery: - enabled: false - register-enabled: false - zookeeper: - enabled: false - consul: - enabled: false - -eureka: - client: - enabled: false - - ---- -spring: - profiles: nacos - - cloud: - nacos: - discovery: - enabled: true - register-enabled: true - server-addr: 127.0.0.1:8848 - - ---- -spring: - profiles: eureka - -eureka: - client: - enabled: true - service-url: - defaultZone: http://127.0.0.1:8761/eureka/ - - ---- -spring: - profiles: zookeeper - cloud: - zookeeper: - enabled: true - connect-string: 127.0.0.1:2181 - - ---- -spring: - profiles: consul - - cloud: - consul: - enabled: true - host: 127.0.0.1 - port: 8500 \ No newline at end of file diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java index 34468b09a..ff70950d6 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/service/DubboMetadataServiceProxy.java @@ -21,7 +21,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; -import com.alibaba.cloud.dubbo.metadata.repository.DubboServiceMetadataRepository; import com.alibaba.cloud.dubbo.metadata.repository.ServiceInstanceSelector; import com.alibaba.cloud.dubbo.util.DubboMetadataUtils; import org.apache.dubbo.common.URL; @@ -60,7 +59,6 @@ public class DubboMetadataServiceProxy implements BeanClassLoaderAware, Disposab public DubboMetadataServiceProxy( DubboGenericServiceFactory dubboGenericServiceFactory, - DubboServiceMetadataRepository dubboServiceMetadataRepository, DubboMetadataUtils dubboMetadataUtils, ServiceInstanceSelector serviceInstanceSelector, DiscoveryClient discoveryClient) {