diff --git a/pom.xml b/pom.xml index d67aaaf9..3294196b 100644 --- a/pom.xml +++ b/pom.xml @@ -98,7 +98,7 @@ spring-cloud-alibaba-fescar spring-cloud-stream-binder-rocketmq spring-cloud-alibaba-nacos-config-server - + spring-cloud-alibaba-dubbo spring-cloud-alicloud-context spring-cloud-alibaba-examples spring-cloud-alibaba-test diff --git a/spring-cloud-alibaba-dubbo/pom.xml b/spring-cloud-alibaba-dubbo/pom.xml index d707cfb5..615f6272 100644 --- a/spring-cloud-alibaba-dubbo/pom.xml +++ b/spring-cloud-alibaba-dubbo/pom.xml @@ -179,7 +179,7 @@ org.apache.dubbo dubbo-spring-boot-starter - ${dubbo-spring-boot.version} + ${dubbo.version} diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java index 02f190de..52d964e5 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/autoconfigure/DubboServiceAutoConfiguration.java @@ -16,12 +16,9 @@ */ package org.springframework.cloud.alibaba.dubbo.autoconfigure; -import org.apache.dubbo.common.utils.Assert; -import org.apache.dubbo.config.spring.util.PropertySourcesUtils; - +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.boot.context.properties.source.ConfigurationPropertySources; import org.springframework.cloud.alibaba.dubbo.env.DubboCloudProperties; import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory; import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactory; @@ -33,17 +30,8 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Primary; -import org.springframework.core.env.AbstractEnvironment; -import org.springframework.core.env.ConfigurableEnvironment; -import org.springframework.core.env.MapPropertySource; -import org.springframework.core.env.MutablePropertySources; +import org.springframework.core.env.Environment; import org.springframework.core.env.PropertyResolver; -import org.springframework.lang.Nullable; - -import java.util.Map; - -import static org.apache.dubbo.spring.boot.util.DubboUtils.BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME; -import static org.apache.dubbo.spring.boot.util.DubboUtils.DUBBO_SCAN_PREFIX; /** * Spring Boot Auto-Configuration class for Dubbo Service @@ -72,80 +60,14 @@ public class DubboServiceAutoConfiguration { } /** - * Bugfix code for an issue : https://github.com/apache/incubator-dubbo-spring-boot-project/issues/459 + * Build a primary {@link PropertyResolver} bean to {@link Autowired @Autowired} * - * @param environment {@link ConfigurableEnvironment} - * @return a Bean of {@link PropertyResolver} + * @param environment {@link Environment} + * @return alias bean for {@link Environment} */ + @Bean @Primary - @Bean(name = BASE_PACKAGES_PROPERTY_RESOLVER_BEAN_NAME) - public PropertyResolver dubboScanBasePackagesPropertyResolver(ConfigurableEnvironment environment) { - ConfigurableEnvironment propertyResolver = new AbstractEnvironment() { - @Override - protected void customizePropertySources(MutablePropertySources propertySources) { - Map dubboScanProperties = PropertySourcesUtils.getSubProperties(environment, DUBBO_SCAN_PREFIX); - propertySources.addLast(new MapPropertySource("dubboScanProperties", dubboScanProperties)); - } - }; - ConfigurationPropertySources.attach(propertyResolver); - return new DelegatingPropertyResolver(propertyResolver); - } - - - private static class DelegatingPropertyResolver implements PropertyResolver { - - private final PropertyResolver delegate; - - DelegatingPropertyResolver(PropertyResolver delegate) { - Assert.notNull(delegate, "The delegate of PropertyResolver must not be null"); - this.delegate = delegate; - } - - @Override - public boolean containsProperty(String key) { - return delegate.containsProperty(key); - } - - @Override - @Nullable - public String getProperty(String key) { - return delegate.getProperty(key); - } - - @Override - public String getProperty(String key, String defaultValue) { - return delegate.getProperty(key, defaultValue); - } - - @Override - @Nullable - public T getProperty(String key, Class targetType) { - return delegate.getProperty(key, targetType); - } - - @Override - public T getProperty(String key, Class targetType, T defaultValue) { - return delegate.getProperty(key, targetType, defaultValue); - } - - @Override - public String getRequiredProperty(String key) throws IllegalStateException { - return delegate.getRequiredProperty(key); - } - - @Override - public T getRequiredProperty(String key, Class targetType) throws IllegalStateException { - return delegate.getRequiredProperty(key, targetType); - } - - @Override - public String resolvePlaceholders(String text) { - return delegate.resolvePlaceholders(text); - } - - @Override - public String resolveRequiredPlaceholders(String text) throws IllegalArgumentException { - return delegate.resolveRequiredPlaceholders(text); - } + public PropertyResolver primaryPropertyResolver(Environment environment) { + return environment; } } \ No newline at end of file diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java index c52cf231..4674f0e1 100644 --- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java +++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractSpringCloudRegistry.java @@ -18,7 +18,6 @@ package org.springframework.cloud.alibaba.dubbo.registry; import org.apache.dubbo.common.Constants; import org.apache.dubbo.common.URL; -import org.apache.dubbo.common.utils.UrlUtils; import org.apache.dubbo.registry.NotifyListener; import org.apache.dubbo.registry.RegistryFactory; import org.apache.dubbo.registry.support.FailbackRegistry; @@ -29,20 +28,21 @@ import org.springframework.cloud.client.ServiceInstance; import org.springframework.cloud.client.discovery.DiscoveryClient; import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; import java.util.LinkedHashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Predicate; +import java.util.stream.Collectors; +import static java.util.Collections.emptyList; import static java.util.Collections.singleton; import static org.apache.dubbo.common.Constants.PROVIDER_SIDE; import static org.apache.dubbo.common.Constants.SIDE_KEY; import static org.springframework.util.ObjectUtils.isEmpty; +import static org.springframework.util.StringUtils.hasText; /** * Abstract Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud" @@ -144,13 +144,8 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } } - private void filterServiceNames(Collection serviceNames) { - filter(serviceNames, new Filter() { - @Override - public boolean accept(String serviceName) { - return supports(serviceName); - } - }); + private Set filterServiceNames(Collection serviceNames) { + return new LinkedHashSet<>(filter(serviceNames, this::supports)); } protected abstract boolean supports(String serviceName); @@ -185,8 +180,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { */ protected Set getServiceNamesForOps(URL url) { Set serviceNames = getAllServiceNames(); - filterServiceNames(serviceNames); - return serviceNames; + return filterServiceNames(serviceNames); } protected abstract String getServiceName(URL url); @@ -206,7 +200,7 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { } protected List getServiceInstances(String serviceName) { - return discoveryClient.getInstances(serviceName); + return hasText(serviceName) ? discoveryClient.getInstances(serviceName) : emptyList(); } private void subscribe(final URL url, final NotifyListener listener, final Collection serviceNames) { @@ -227,67 +221,9 @@ public abstract class AbstractSpringCloudRegistry extends FailbackRegistry { */ protected abstract void notifySubscriber(URL url, NotifyListener listener, List serviceInstances); - protected void filterHealthyInstances(Collection instances) { - filter(instances, new Filter() { - @Override - public boolean accept(ServiceInstance data) { - // TODO check the details of status -// return serviceRegistry.getStatus(new DubboRegistration(data)) != null; - return true; - } - }); + protected Collection filter(Collection collection, Predicate filter) { + return collection.stream() + .filter(filter) + .collect(Collectors.toList()); } - - protected List buildURLs(URL consumerURL, Collection serviceInstances) { - if (serviceInstances.isEmpty()) { - return Collections.emptyList(); - } - List urls = new LinkedList(); - for (ServiceInstance serviceInstance : serviceInstances) { - URL url = buildURL(serviceInstance); - if (UrlUtils.isMatch(consumerURL, url)) { - urls.add(url); - } - } - return urls; - } - - private URL buildURL(ServiceInstance serviceInstance) { - URL url = new URL(serviceInstance.getMetadata().get(Constants.PROTOCOL_KEY), - serviceInstance.getHost(), - serviceInstance.getPort(), - serviceInstance.getMetadata()); - return url; - } - - private void filter(Collection collection, Filter filter) { - Iterator iterator = collection.iterator(); - while (iterator.hasNext()) { - T data = iterator.next(); - if (!filter.accept(data)) { // remove if not accept - iterator.remove(); - } - } - } - - private static T[] of(T... values) { - return values; - } - - /** - * A filter - */ - public interface Filter { - - /** - * Tests whether or not the specified data should be accepted. - * - * @param data The data to be tested - * @return true if and only if data - * should be accepted - */ - boolean accept(T data); - - } - } diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java index f4d4ae48..0dadefc4 100644 --- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java +++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/NacosDiscoveryProperties.java @@ -68,7 +68,7 @@ public class NacosDiscoveryProperties { /** * watch delay,duration to pull new service from nacos server. */ - private long watchDelay = 5000; + private long watchDelay = 30000; /** * nacos naming log file name diff --git a/spring-cloud-starter-alibaba/pom.xml b/spring-cloud-starter-alibaba/pom.xml index 55f2d696..44b44145 100644 --- a/spring-cloud-starter-alibaba/pom.xml +++ b/spring-cloud-starter-alibaba/pom.xml @@ -19,6 +19,6 @@ spring-cloud-starter-alibaba-fescar spring-cloud-starter-stream-rocketmq spring-cloud-starter-bus-rocketmq - + spring-cloud-starter-dubbo \ No newline at end of file