urls = serviceBean.getExportedUrls();
urls.stream()
- .map(SpringCloudRegistry::getServiceName)
- .forEach(serviceName -> {
+ .map(URL::toString)
+ .forEach(url -> {
ServiceRestMetadata metadata = new ServiceRestMetadata();
- metadata.setName(serviceName);
+ metadata.setUrl(url);
metadata.setMeta(methodRestMetadata);
serviceRestMetadata.add(metadata);
});
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java
index 922ce6d39..c4d0a1c77 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/metadata/resolver/MetadataResolver.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.metadata.resolver;
-import com.alibaba.dubbo.config.spring.ServiceBean;
-
+import org.apache.dubbo.config.spring.ServiceBean;
import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata;
import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java
index 95dd73c06..ab4d18faf 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/DubboInvocationHandler.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.openfeign;
-import com.alibaba.dubbo.rpc.service.GenericService;
-
+import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata;
import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContext;
import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceExecutionContextFactory;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java
index 0eda4d1b2..52ee10e55 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/FeignMethodMetadata.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.openfeign;
-import com.alibaba.dubbo.rpc.service.GenericService;
-
+import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata;
import java.lang.reflect.Method;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java
index a4a3c77f0..331e7a000 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterBeanPostProcessor.java
@@ -25,6 +25,7 @@ import org.springframework.cloud.alibaba.dubbo.service.DubboGenericServiceFactor
import org.springframework.core.env.Environment;
import static java.lang.reflect.Proxy.newProxyInstance;
+import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration.TARGETER_CLASS_NAME;
import static org.springframework.util.ClassUtils.getUserClass;
import static org.springframework.util.ClassUtils.isPresent;
import static org.springframework.util.ClassUtils.resolveClassName;
@@ -36,8 +37,6 @@ import static org.springframework.util.ClassUtils.resolveClassName;
*/
public class TargeterBeanPostProcessor implements BeanPostProcessor, BeanClassLoaderAware {
- private static final String TARGETER_CLASS_NAME = "org.springframework.cloud.openfeign.Targeter";
-
private final Environment environment;
private final DubboServiceMetadataRepository dubboServiceMetadataRepository;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java
index c665c2451..e606367a0 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/openfeign/TargeterInvocationHandler.java
@@ -17,10 +17,9 @@
package org.springframework.cloud.alibaba.dubbo.openfeign;
-import com.alibaba.dubbo.rpc.service.GenericService;
-
import feign.Contract;
import feign.Target;
+import org.apache.dubbo.rpc.service.GenericService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractRegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractRegistrationFactory.java
index 41d06eb02..8cd299986 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractRegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/AbstractRegistrationFactory.java
@@ -16,13 +16,13 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry;
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NetUtils;
-
+import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.common.URL;
+import org.springframework.cloud.alibaba.dubbo.registry.handler.DubboRegistryServiceIdHandler;
import org.springframework.cloud.client.DefaultServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.serviceregistry.Registration;
+import org.springframework.context.ConfigurableApplicationContext;
import java.util.LinkedHashMap;
@@ -30,20 +30,49 @@ import java.util.LinkedHashMap;
* Abstract {@link RegistrationFactory} implementation
*
*
- * @param The subclass of {@link Registration}
+ * @param The subclass of {@link Registration}
* @author Mercy
*/
-public abstract class AbstractRegistrationFactory implements RegistrationFactory {
+public abstract class AbstractRegistrationFactory implements RegistrationFactory {
+
+ public final R create(URL url, ConfigurableApplicationContext applicationContext) {
+ ServiceInstance serviceInstance = createServiceInstance(url, applicationContext);
+ return create(url, applicationContext, serviceInstance);
+ }
+
+ /**
+ * Sub-class should override this method to create an instance of {@link R}
+ *
+ * @param url The Dubbo's {@link URL}
+ * @param applicationContext {@link ConfigurableApplicationContext}
+ * @param serviceInstance {@link ServiceInstance}
+ * @return nullable
+ */
+ protected abstract R create(URL url, ConfigurableApplicationContext applicationContext, ServiceInstance serviceInstance);
- protected ServiceInstance createServiceInstance(String serviceName, URL url) {
+ /**
+ * Create an instance {@link ServiceInstance}. This method maybe override by sub-class.
+ *
+ * @param url The Dubbo's {@link URL}
+ * @param applicationContext {@link ConfigurableApplicationContext}
+ * @return an instance {@link ServiceInstance}
+ */
+ protected ServiceInstance createServiceInstance(URL url, ConfigurableApplicationContext applicationContext) {
+ String serviceId = createServiceId(url, applicationContext);
// Append default category if absent
String category = url.getParameter(Constants.CATEGORY_KEY, Constants.DEFAULT_CATEGORY);
URL newURL = url.addParameter(Constants.CATEGORY_KEY, category);
newURL = newURL.addParameter(Constants.PROTOCOL_KEY, url.getProtocol());
- String ip = NetUtils.getLocalHost();
+ String ip = url.getIp();
int port = newURL.getParameter(Constants.BIND_PORT_KEY, url.getPort());
- DefaultServiceInstance serviceInstance = new DefaultServiceInstance(url.toIdentityString(), serviceName, ip, port, false);
+ DefaultServiceInstance serviceInstance = new DefaultServiceInstance(url.toIdentityString(), serviceId, ip, port, false);
serviceInstance.getMetadata().putAll(new LinkedHashMap<>(newURL.getParameters()));
return serviceInstance;
}
+
+ protected String createServiceId(URL url, ConfigurableApplicationContext applicationContext) {
+ DubboRegistryServiceIdHandler handler = applicationContext.getBean(DubboRegistryServiceIdHandler.class);
+ return handler.createServiceId(url);
+ }
}
+
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DefaultRegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DefaultRegistrationFactory.java
index ac3e35f32..308657684 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DefaultRegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/DefaultRegistrationFactory.java
@@ -16,10 +16,10 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry;
-import com.alibaba.dubbo.common.URL;
-
+import org.apache.dubbo.common.URL;
+import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.serviceregistry.Registration;
-import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
/**
* Default {@link RegistrationFactory}
@@ -29,7 +29,7 @@ import org.springframework.context.ApplicationContext;
public class DefaultRegistrationFactory extends AbstractRegistrationFactory {
@Override
- public Registration create(String serviceName, URL url, ApplicationContext applicationContext) {
- return new DelegatingRegistration(createServiceInstance(serviceName, url));
+ protected Registration create(URL url, ConfigurableApplicationContext applicationContext, ServiceInstance serviceInstance) {
+ return new DelegatingRegistration(serviceInstance);
}
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/RegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/RegistrationFactory.java
index 7d8d298cf..d7d977374 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/RegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/RegistrationFactory.java
@@ -16,27 +16,25 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry;
-import com.alibaba.dubbo.common.URL;
-
+import org.apache.dubbo.common.URL;
import org.springframework.cloud.client.serviceregistry.Registration;
-import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
/**
* {@link Registration} Factory to createServiceInstance a instance of {@link Registration}
*
- * @param The subclass of {@link Registration}
+ * @param The subclass of {@link Registration}
* @author Mercy
*/
-public interface RegistrationFactory {
+public interface RegistrationFactory {
/**
- * Create a instance of {@link T}
+ * Create a instance of {@link R}
*
- * @param serviceName The service name of Dubbo service interface
- * @param url The Dubbo's URL
- * @param applicationContext {@link ApplicationContext}
- * @return a instance of {@link T}
+ * @param url The Dubbo's {@link URL}
+ * @param applicationContext {@link ConfigurableApplicationContext}
+ * @return a instance of {@link R}, if null, it indicates the registration will not be executed.
*/
- T create(String serviceName, URL url, ApplicationContext applicationContext);
+ R create(URL url, ConfigurableApplicationContext applicationContext);
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java
index 30678ed1f..d87e1f6c1 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistry.java
@@ -16,47 +16,37 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry;
-import com.alibaba.dubbo.common.Constants;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.common.utils.NamedThreadFactory;
-import com.alibaba.dubbo.common.utils.UrlUtils;
-import com.alibaba.dubbo.registry.NotifyListener;
-import com.alibaba.dubbo.registry.RegistryFactory;
-import com.alibaba.dubbo.registry.support.FailbackRegistry;
-
+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;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.cloud.alibaba.dubbo.registry.handler.DubboRegistryServiceIdHandler;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
-import org.springframework.context.ApplicationContext;
-import org.springframework.core.ResolvableType;
-import org.springframework.util.StringUtils;
+import org.springframework.context.ConfigurableApplicationContext;
-import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Objects;
+import java.util.Map;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
-import static com.alibaba.dubbo.common.Constants.CONFIGURATORS_CATEGORY;
-import static com.alibaba.dubbo.common.Constants.CONSUMERS_CATEGORY;
-import static com.alibaba.dubbo.common.Constants.PROVIDERS_CATEGORY;
-import static com.alibaba.dubbo.common.Constants.ROUTERS_CATEGORY;
-import static java.lang.Long.getLong;
-import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
-import static org.springframework.beans.BeanUtils.instantiateClass;
-import static org.springframework.core.ResolvableType.forInstance;
-import static org.springframework.core.ResolvableType.forType;
-import static org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames;
-import static org.springframework.util.ClassUtils.isPresent;
-import static org.springframework.util.ClassUtils.resolveClassName;
+import static java.util.Collections.singletonList;
+import static org.apache.dubbo.common.Constants.CONFIGURATORS_CATEGORY;
+import static org.apache.dubbo.common.Constants.CONSUMERS_CATEGORY;
+import static org.apache.dubbo.common.Constants.PROVIDERS_CATEGORY;
+import static org.apache.dubbo.common.Constants.PROVIDER_SIDE;
+import static org.apache.dubbo.common.Constants.ROUTERS_CATEGORY;
+import static org.apache.dubbo.common.Constants.SIDE_KEY;
/**
* Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud"
@@ -66,305 +56,130 @@ import static org.springframework.util.ClassUtils.resolveClassName;
public class SpringCloudRegistry extends FailbackRegistry {
/**
- * All supported categories
+ * The parameter name of {@link #allServicesLookupInterval}
*/
- private static final String[] ALL_SUPPORTED_CATEGORIES = of(
- PROVIDERS_CATEGORY,
- CONSUMERS_CATEGORY,
- ROUTERS_CATEGORY,
- CONFIGURATORS_CATEGORY
- );
-
- private static final int CATEGORY_INDEX = 0;
-
- private static final int SERVICE_INTERFACE_INDEX = CATEGORY_INDEX + 1;
-
- private static final int SERVICE_VERSION_INDEX = SERVICE_INTERFACE_INDEX + 1;
-
- private static final int SERVICE_GROUP_INDEX = SERVICE_VERSION_INDEX + 1;
-
- private static final String WILDCARD = "*";
+ public static final String ALL_SERVICES_LOOKUP_INTERVAL_PARAM_NAME = "dubbo.all.services.lookup.interval";
/**
- * The interval in second of lookup service names(only for Dubbo-OPS)
+ * The parameter name of {@link #registeredServicesLookupInterval}
*/
- private static final long ALL_SERVICES_LOOKUP_INTERVAL = getLong("dubbo.all.services.lookup.interval", 30);
+ public static final String REGISTERED_SERVICES_LOOKUP_INTERVAL_PARAM_NAME = "dubbo.registered.services.lookup.interval";
/**
- * The interval in second of lookup regigered service instances
- */
- private static final long REGISTERED_SERVICES_LOOKUP_INTERVAL = getLong("dubbo.registered.services.lookup.interval", 300);
-
- /**
- * The {@link ScheduledExecutorService Scheduler} to lookup the registered services
- */
- private static final ScheduledExecutorService registeredServicesLookupScheduler = newSingleThreadScheduledExecutor(new NamedThreadFactory("dubbo-registered-services-lookup-"));
-
- /**
- * The {@link ScheduledExecutorService Scheduler} to lookup all services (only for Dubbo-OPS)
+ * All supported categories
*/
- private static volatile ScheduledExecutorService allServicesLookupScheduler;
+ public static final String[] ALL_SUPPORTED_CATEGORIES = of(
+ PROVIDERS_CATEGORY,
+ CONSUMERS_CATEGORY,
+ ROUTERS_CATEGORY,
+ CONFIGURATORS_CATEGORY
+ );
private final Logger logger = LoggerFactory.getLogger(getClass());
/**
- * The separator for service name
+ * The interval in second of lookup service names(only for Dubbo-OPS)
*/
- private static final String SERVICE_NAME_SEPARATOR = ":";
+ private final long allServicesLookupInterval;
- private final ApplicationContext applicationContext;
+ private final long registeredServicesLookupInterval;
private final ServiceRegistry serviceRegistry;
- private final DiscoveryClient discoveryClient;
-
private final RegistrationFactory registrationFactory;
- public SpringCloudRegistry(URL url, ApplicationContext applicationContext) {
- super(url);
- this.applicationContext = applicationContext;
- this.serviceRegistry = applicationContext.getBean(ServiceRegistry.class);
- this.registrationFactory = buildRegistrationFactory(serviceRegistry, applicationContext.getClassLoader());
- this.discoveryClient = applicationContext.getBean(DiscoveryClient.class);
- applicationContext.getClassLoader();
- }
-
- private RegistrationFactory buildRegistrationFactory(ServiceRegistry serviceRegistry,
- ClassLoader classLoader) {
- RegistrationFactory registrationFactory = null;
- List factoryClassNames = loadFactoryNames(RegistrationFactory.class, classLoader);
-
- ResolvableType serviceRegistryType = forInstance(serviceRegistry);
- // Get first generic Class
- Class> registrationClass = resolveGenericClass(serviceRegistryType, ServiceRegistry.class, 0);
-
- for (String factoryClassName : factoryClassNames) {
- if (isPresent(factoryClassName, classLoader)) { // ignore compilation issue
- Class> factoryClass = resolveClassName(factoryClassName, classLoader);
- ResolvableType registrationFactoryType = forType(factoryClass);
- Class> actualRegistrationClass = resolveGenericClass(registrationFactoryType, RegistrationFactory.class, 0);
- if (registrationClass.equals(actualRegistrationClass)) {
- registrationFactory = (RegistrationFactory) instantiateClass(registrationFactoryType.getRawClass());
- break;
- }
- }
- }
+ private final DiscoveryClient discoveryClient;
- if (registrationFactory == null) {
+ private final DubboRegistryServiceIdHandler dubboRegistryServiceIdHandler;
- if (logger.isWarnEnabled()) {
- logger.warn("{} implementation can't be resolved by ServiceRegistry[{}]",
- registrationClass.getSimpleName(), serviceRegistry.getClass().getName());
- }
+ private final ScheduledExecutorService servicesLookupScheduler;
- registrationFactory = new DefaultRegistrationFactory();
- } else {
- if (logger.isInfoEnabled()) {
- logger.info("{} has been resolved by ServiceRegistry[{}]",
- registrationFactory.getClass().getName(), serviceRegistry.getClass().getName());
- }
- }
+ private final ConfigurableApplicationContext applicationContext;
- return registrationFactory;
+ public SpringCloudRegistry(URL url,
+ ServiceRegistry serviceRegistry,
+ RegistrationFactory registrationFactory,
+ DiscoveryClient discoveryClient,
+ ScheduledExecutorService servicesLookupScheduler,
+ ConfigurableApplicationContext applicationContext) {
+ super(url);
+ this.allServicesLookupInterval = url.getParameter(ALL_SERVICES_LOOKUP_INTERVAL_PARAM_NAME, 30L);
+ this.registeredServicesLookupInterval = url.getParameter(REGISTERED_SERVICES_LOOKUP_INTERVAL_PARAM_NAME, 300L);
+ this.serviceRegistry = serviceRegistry;
+ this.registrationFactory = registrationFactory;
+ this.discoveryClient = discoveryClient;
+ this.dubboRegistryServiceIdHandler = applicationContext.getBean(DubboRegistryServiceIdHandler.class);
+ this.applicationContext = applicationContext;
+ this.servicesLookupScheduler = servicesLookupScheduler;
}
- private Class> resolveGenericClass(ResolvableType implementedType, Class> interfaceClass, int index) {
-
- ResolvableType resolvableType = implementedType;
-
- try {
- OUTER:
- while (true) {
-
- ResolvableType[] interfaceTypes = resolvableType.getInterfaces();
-
- for (ResolvableType interfaceType : interfaceTypes) {
- if (interfaceType.resolve().equals(interfaceClass)) {
- resolvableType = interfaceType;
- break OUTER;
- }
- }
-
- ResolvableType superType = resolvableType.getSuperType();
-
- Class> superClass = superType.resolve();
-
- if (Object.class.equals(superClass)) {
- break;
- }
-
- resolvableType = superType;
- }
-
- } catch (Throwable e) {
- resolvableType = ResolvableType.forType(void.class);
- }
-
- return resolvableType.resolveGeneric(index);
+ protected boolean shouldRegister(Registration registration) {
+ Map metadata = registration.getMetadata();
+ String side = metadata.get(SIDE_KEY);
+ return PROVIDER_SIDE.equals(side); // Only register the Provider.
}
-
@Override
- protected void doRegister(URL url) {
- final String serviceName = getServiceName(url);
- final Registration registration = createRegistration(serviceName, url);
- serviceRegistry.register(registration);
+ public void doRegister(URL url) {
+ final Registration registration = createRegistration(url);
+ if (shouldRegister(registration)) {
+ serviceRegistry.register(registration);
+ }
}
@Override
- protected void doUnregister(URL url) {
- final String serviceName = getServiceName(url);
- final Registration registration = createRegistration(serviceName, url);
- this.serviceRegistry.deregister(registration);
+ public void doUnregister(URL url) {
+ final Registration registration = createRegistration(url);
+ if (shouldRegister(registration)) {
+ this.serviceRegistry.deregister(registration);
+ }
}
@Override
- protected void doSubscribe(URL url, NotifyListener listener) {
+ public void doSubscribe(URL url, NotifyListener listener) {
List serviceNames = getServiceNames(url, listener);
doSubscribe(url, listener, serviceNames);
- this.registeredServicesLookupScheduler.scheduleAtFixedRate(new Runnable() {
+ this.servicesLookupScheduler.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
doSubscribe(url, listener, serviceNames);
}
- }, REGISTERED_SERVICES_LOOKUP_INTERVAL, REGISTERED_SERVICES_LOOKUP_INTERVAL, TimeUnit.SECONDS);
+ }, registeredServicesLookupInterval, registeredServicesLookupInterval, TimeUnit.SECONDS);
}
@Override
- protected void doUnsubscribe(URL url, NotifyListener listener) {
+ public void doUnsubscribe(URL url, NotifyListener listener) {
if (isAdminProtocol(url)) {
shutdownServiceNamesLookup();
}
-
-// if (registeredServicesLookupScheduler != null) {
-// registeredServicesLookupScheduler.shutdown();
-// }
}
@Override
public boolean isAvailable() {
- return false;
+ return !discoveryClient.getServices().isEmpty();
}
private void shutdownServiceNamesLookup() {
- if (allServicesLookupScheduler != null) {
- allServicesLookupScheduler.shutdown();
+ if (servicesLookupScheduler != null) {
+ servicesLookupScheduler.shutdown();
}
}
- private Registration createRegistration(String serviceName, URL url) {
- return registrationFactory.create(serviceName, url, applicationContext);
- }
-
- public static String getServiceName(URL url) {
- String category = url.getParameter(Constants.CATEGORY_KEY, Constants.DEFAULT_CATEGORY);
- return getServiceName(url, category);
+ private Registration createRegistration(URL url) {
+ return registrationFactory.create(url, applicationContext);
}
- private static String getServiceName(URL url, String category) {
- StringBuilder serviceNameBuilder = new StringBuilder(category);
- appendIfPresent(serviceNameBuilder, url, Constants.INTERFACE_KEY);
- appendIfPresent(serviceNameBuilder, url, Constants.VERSION_KEY);
- appendIfPresent(serviceNameBuilder, url, Constants.GROUP_KEY);
- return serviceNameBuilder.toString();
- }
-
- private static void appendIfPresent(StringBuilder target, URL url, String parameterName) {
- String parameterValue = url.getParameter(parameterName);
- appendIfPresent(target, parameterValue);
- }
-
- private static void appendIfPresent(StringBuilder target, String parameterValue) {
- if (StringUtils.hasText(parameterValue)) {
- target.append(SERVICE_NAME_SEPARATOR).append(parameterValue);
- }
- }
-
- private void filterServiceNames(List serviceNames, URL url) {
-
- final String[] categories = getCategories(url);
-
- final String targetServiceInterface = url.getServiceInterface();
-
- final String targetVersion = url.getParameter(Constants.VERSION_KEY);
-
- final String targetGroup = url.getParameter(Constants.GROUP_KEY);
-
+ private void filterServiceNames(List serviceNames) {
filter(serviceNames, new Filter() {
@Override
public boolean accept(String serviceName) {
- // split service name to segments
- // (required) segments[0] = category
- // (required) segments[1] = serviceInterface
- // (required) segments[2] = version
- // (optional) segments[3] = group
- String[] segments = getServiceSegments(serviceName);
- int length = segments.length;
- if (length < SERVICE_GROUP_INDEX) { // must present 4 segments or more
- return false;
- }
-
- String category = getCategory(segments);
- if (Arrays.binarySearch(categories, category) > -1) { // no match category
- return false;
- }
-
- String serviceInterface = getServiceInterface(segments);
- if (!WILDCARD.equals(targetServiceInterface) &&
- !Objects.equals(targetServiceInterface, serviceInterface)) { // no match service interface
- return false;
- }
-
- String version = getServiceVersion(segments);
- if (!WILDCARD.equals(targetVersion) &&
- !Objects.equals(targetVersion, version)) { // no match service version
- return false;
- }
-
- String group = getServiceGroup(segments);
- if (group != null && !WILDCARD.equals(targetGroup)
- && !Objects.equals(targetGroup, group)) { // no match service group
- return false;
- }
-
- return true;
+ return dubboRegistryServiceIdHandler.supports(serviceName);
}
});
}
- public static String[] getServiceSegments(String serviceName) {
- return StringUtils.delimitedListToStringArray(serviceName, SERVICE_NAME_SEPARATOR);
- }
-
- public static String getCategory(String[] segments) {
- return segments[CATEGORY_INDEX];
- }
-
- public static String getServiceInterface(String[] segments) {
- return segments[SERVICE_INTERFACE_INDEX];
- }
-
- public static String getServiceVersion(String[] segments) {
- return segments[SERVICE_VERSION_INDEX];
- }
-
- public static String getServiceGroup(String[] segments) {
- return segments.length > SERVICE_GROUP_INDEX ? segments[SERVICE_GROUP_INDEX] : null;
- }
-
- /**
- * Get the categories from {@link URL}
- *
- * @param url {@link URL}
- * @return non-null array
- */
- private String[] getCategories(URL url) {
- return Constants.ANY_VALUE.equals(url.getServiceInterface()) ?
- ALL_SUPPORTED_CATEGORIES : of(Constants.DEFAULT_CATEGORY);
- }
-
private List getAllServiceNames() {
- return discoveryClient.getServices();
+ return new LinkedList<>(discoveryClient.getServices());
}
/**
@@ -379,7 +194,7 @@ public class SpringCloudRegistry extends FailbackRegistry {
initAllServicesLookupScheduler(url, listener);
return getServiceNamesForOps(url);
} else {
- return doGetServiceNames(url);
+ return singletonList(dubboRegistryServiceIdHandler.createServiceId(url));
}
}
@@ -389,30 +204,14 @@ public class SpringCloudRegistry extends FailbackRegistry {
}
private void initAllServicesLookupScheduler(final URL url, final NotifyListener listener) {
- if (allServicesLookupScheduler == null) {
- allServicesLookupScheduler = newSingleThreadScheduledExecutor(new NamedThreadFactory("dubbo-all-services-lookup-"));
- allServicesLookupScheduler.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
- List serviceNames = getAllServiceNames();
- filter(serviceNames, new Filter() {
- @Override
- public boolean accept(String serviceName) {
- boolean accepted = false;
- for (String category : ALL_SUPPORTED_CATEGORIES) {
- String prefix = category + SERVICE_NAME_SEPARATOR;
- if (StringUtils.startsWithIgnoreCase(serviceName, prefix)) {
- accepted = true;
- break;
- }
- }
- return accepted;
- }
- });
- doSubscribe(url, listener, serviceNames);
- }
- }, ALL_SERVICES_LOOKUP_INTERVAL, ALL_SERVICES_LOOKUP_INTERVAL, TimeUnit.SECONDS);
- }
+ servicesLookupScheduler.scheduleAtFixedRate(new Runnable() {
+ @Override
+ public void run() {
+ List serviceNames = getAllServiceNames();
+ filterServiceNames(serviceNames);
+ doSubscribe(url, listener, serviceNames);
+ }
+ }, allServicesLookupInterval, allServicesLookupInterval, TimeUnit.SECONDS);
}
private void doSubscribe(final URL url, final NotifyListener listener, final List serviceNames) {
@@ -422,16 +221,6 @@ public class SpringCloudRegistry extends FailbackRegistry {
}
}
- private List doGetServiceNames(URL url) {
- String[] categories = getCategories(url);
- List serviceNames = new ArrayList(categories.length);
- for (String category : categories) {
- final String serviceName = getServiceName(url, category);
- serviceNames.add(serviceName);
- }
- return serviceNames;
- }
-
/**
* Notify the Healthy {@link ServiceInstance service instance} to subscriber.
*
@@ -488,7 +277,7 @@ public class SpringCloudRegistry extends FailbackRegistry {
*/
private List getServiceNamesForOps(URL url) {
List serviceNames = getAllServiceNames();
- filterServiceNames(serviceNames, url);
+ filterServiceNames(serviceNames);
return serviceNames;
}
@@ -509,7 +298,7 @@ public class SpringCloudRegistry extends FailbackRegistry {
/**
* A filter
*/
- private interface Filter {
+ public interface Filter {
/**
* Tests whether or not the specified data should be accepted.
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java
index 7b0a9169a..3ff199c92 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/SpringCloudRegistryFactory.java
@@ -16,11 +16,29 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry;
-import com.alibaba.dubbo.common.URL;
-import com.alibaba.dubbo.registry.Registry;
-import com.alibaba.dubbo.registry.RegistryFactory;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.common.utils.NamedThreadFactory;
+import org.apache.dubbo.registry.Registry;
+import org.apache.dubbo.registry.RegistryFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.cloud.client.discovery.DiscoveryClient;
+import org.springframework.cloud.client.serviceregistry.Registration;
+import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.core.ResolvableType;
-import org.springframework.context.ApplicationContext;
+import java.util.List;
+import java.util.concurrent.ScheduledExecutorService;
+
+import static java.lang.System.getProperty;
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.springframework.beans.BeanUtils.instantiateClass;
+import static org.springframework.core.ResolvableType.forInstance;
+import static org.springframework.core.ResolvableType.forType;
+import static org.springframework.core.io.support.SpringFactoriesLoader.loadFactoryNames;
+import static org.springframework.util.ClassUtils.isPresent;
+import static org.springframework.util.ClassUtils.resolveClassName;
/**
* Dubbo {@link RegistryFactory} uses Spring Cloud Service Registration abstraction, whose protocol is "spring-cloud"
@@ -31,14 +49,122 @@ import org.springframework.context.ApplicationContext;
*/
public class SpringCloudRegistryFactory implements RegistryFactory {
- private static ApplicationContext applicationContext;
+ private static String SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX =
+ getProperty("dubbo.services.lookup.scheduler.thread.name.prefix ", "dubbo-services-lookup-");
+
+ private static ConfigurableApplicationContext applicationContext;
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ private final ScheduledExecutorService servicesLookupScheduler;
+
+ private ServiceRegistry serviceRegistry;
+
+ private RegistrationFactory registrationFactory;
+
+ private DiscoveryClient discoveryClient;
+
+ private volatile boolean initialized = false;
+
+ public SpringCloudRegistryFactory() {
+ servicesLookupScheduler = newSingleThreadScheduledExecutor(
+ new NamedThreadFactory(SERVICES_LOOKUP_SCHEDULER_THREAD_NAME_PREFIX));
+ }
+
+ protected void init() {
+ if (initialized || applicationContext == null) {
+ return;
+ }
+
+ this.serviceRegistry = applicationContext.getBean(ServiceRegistry.class);
+ this.registrationFactory = buildRegistrationFactory(serviceRegistry, applicationContext.getClassLoader());
+ this.discoveryClient = applicationContext.getBean(DiscoveryClient.class);
+ }
@Override
public Registry getRegistry(URL url) {
- return new SpringCloudRegistry(url, applicationContext);
+ init();
+ return new SpringCloudRegistry(url, serviceRegistry, registrationFactory, discoveryClient,
+ servicesLookupScheduler, applicationContext);
}
- public static void setApplicationContext(ApplicationContext applicationContext) {
+ public static void setApplicationContext(ConfigurableApplicationContext applicationContext) {
SpringCloudRegistryFactory.applicationContext = applicationContext;
}
+
+
+ private RegistrationFactory buildRegistrationFactory(ServiceRegistry serviceRegistry,
+ ClassLoader classLoader) {
+ RegistrationFactory registrationFactory = null;
+ List factoryClassNames = loadFactoryNames(RegistrationFactory.class, classLoader);
+
+ ResolvableType serviceRegistryType = forInstance(serviceRegistry);
+ // Get first generic Class
+ Class> registrationClass = resolveGenericClass(serviceRegistryType, ServiceRegistry.class, 0);
+
+ for (String factoryClassName : factoryClassNames) {
+ if (isPresent(factoryClassName, classLoader)) { // ignore compilation issue
+ Class> factoryClass = resolveClassName(factoryClassName, classLoader);
+ ResolvableType registrationFactoryType = forType(factoryClass);
+ Class> actualRegistrationClass = resolveGenericClass(registrationFactoryType, RegistrationFactory.class, 0);
+ if (registrationClass.equals(actualRegistrationClass)) {
+ registrationFactory = (RegistrationFactory) instantiateClass(registrationFactoryType.getRawClass());
+ break;
+ }
+ }
+ }
+
+ if (registrationFactory == null) {
+
+ if (logger.isWarnEnabled()) {
+ logger.warn("{} implementation can't be resolved by ServiceRegistry[{}]",
+ registrationClass.getSimpleName(), serviceRegistry.getClass().getName());
+ }
+
+ registrationFactory = new DefaultRegistrationFactory();
+ } else {
+ if (logger.isInfoEnabled()) {
+ logger.info("{} has been resolved by ServiceRegistry[{}]",
+ registrationFactory.getClass().getName(), serviceRegistry.getClass().getName());
+ }
+ }
+
+ return registrationFactory;
+ }
+
+ private Class> resolveGenericClass(ResolvableType implementedType, Class> interfaceClass, int index) {
+
+ ResolvableType resolvableType = implementedType;
+
+ try {
+ OUTER:
+ while (true) {
+
+ ResolvableType[] interfaceTypes = resolvableType.getInterfaces();
+
+ for (ResolvableType interfaceType : interfaceTypes) {
+ if (interfaceType.resolve().equals(interfaceClass)) {
+ resolvableType = interfaceType;
+ break OUTER;
+ }
+ }
+
+ ResolvableType superType = resolvableType.getSuperType();
+
+ Class> superClass = superType.resolve();
+
+ if (Object.class.equals(superClass)) {
+ break;
+ }
+
+ resolvableType = superType;
+ }
+
+ } catch (Throwable e) {
+ resolvableType = ResolvableType.forType(void.class);
+ }
+
+ return resolvableType.resolveGeneric(index);
+ }
+
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/apache/zookeeper/ZookeeperRegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/apache/zookeeper/ZookeeperRegistrationFactory.java
index 77becb0e5..d24e9e718 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/apache/zookeeper/ZookeeperRegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/apache/zookeeper/ZookeeperRegistrationFactory.java
@@ -16,15 +16,14 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry.apache.zookeeper;
-import com.alibaba.dubbo.common.URL;
-
+import org.apache.dubbo.common.URL;
import org.springframework.cloud.alibaba.dubbo.registry.AbstractRegistrationFactory;
import org.springframework.cloud.alibaba.dubbo.registry.RegistrationFactory;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.zookeeper.discovery.ZookeeperInstance;
import org.springframework.cloud.zookeeper.serviceregistry.ServiceInstanceRegistration;
import org.springframework.cloud.zookeeper.serviceregistry.ZookeeperRegistration;
-import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
/**
* Zookeeper {@link RegistrationFactory}
@@ -34,10 +33,7 @@ import org.springframework.context.ApplicationContext;
public class ZookeeperRegistrationFactory extends AbstractRegistrationFactory {
@Override
- public ZookeeperRegistration create(String serviceName, URL url, ApplicationContext applicationContext) {
-
- ServiceInstance serviceInstance = createServiceInstance(serviceName, url);
-
+ protected ZookeeperRegistration create(URL url, ConfigurableApplicationContext applicationContext, ServiceInstance serviceInstance) {
ZookeeperInstance zookeeperInstance = new ZookeeperInstance(serviceInstance.getInstanceId(),
serviceInstance.getServiceId(), serviceInstance.getMetadata());
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/DubboRegistryServiceIdHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/DubboRegistryServiceIdHandler.java
new file mode 100644
index 000000000..15a350291
--- /dev/null
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/DubboRegistryServiceIdHandler.java
@@ -0,0 +1,53 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * http://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 org.springframework.cloud.alibaba.dubbo.registry.handler;
+
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.registry.Registry;
+import org.springframework.context.ConfigurableApplicationContext;
+
+/**
+ * Dubbo {@link Registry} Spring Cloud Service Id Builder
+ *
+ * @author Mercy
+ */
+public interface DubboRegistryServiceIdHandler {
+
+ /**
+ * Supports the specified id of Spring Cloud Service or not
+ *
+ * @param serviceId the specified id of Spring Cloud Service
+ * @return if supports, return true
, or false
+ */
+ boolean supports(String serviceId);
+
+ /**
+ * Creates the id of Spring Cloud Service
+ *
+ * @param url The Dubbo's {@link URL}
+ * @return non-null
+ */
+ String createServiceId(URL url);
+
+ /**
+ * The instance if {@link ConfigurableApplicationContext} .
+ *
+ * @return non-null
+ */
+ ConfigurableApplicationContext getContext();
+
+}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/StandardDubboRegistryServiceIdHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/StandardDubboRegistryServiceIdHandler.java
new file mode 100644
index 000000000..caaa07060
--- /dev/null
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/handler/StandardDubboRegistryServiceIdHandler.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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
+ *
+ * http://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 org.springframework.cloud.alibaba.dubbo.registry.handler;
+
+import org.apache.dubbo.common.Constants;
+import org.apache.dubbo.common.URL;
+import org.springframework.context.ConfigurableApplicationContext;
+import org.springframework.util.StringUtils;
+
+import java.util.Objects;
+
+import static java.lang.System.getProperty;
+import static org.apache.dubbo.common.Constants.CONSUMERS_CATEGORY;
+import static org.apache.dubbo.common.Constants.PROVIDERS_CATEGORY;
+import static org.springframework.util.StringUtils.startsWithIgnoreCase;
+
+/**
+ * The Standard {@link DubboRegistryServiceIdHandler}
+ *
+ * The service ID pattern is "${category}:${interface}:${version}:${group}"
+ *
+ * @author Mercy
+ */
+public class StandardDubboRegistryServiceIdHandler implements DubboRegistryServiceIdHandler {
+
+ /**
+ * The separator for service name that could be changed by the Java Property "dubbo.service.name.separator".
+ */
+ protected static final String SERVICE_NAME_SEPARATOR = getProperty("dubbo.service.name.separator", ":");
+
+ private final ConfigurableApplicationContext context;
+
+ public StandardDubboRegistryServiceIdHandler(ConfigurableApplicationContext context) {
+ this.context = context;
+ }
+
+ @Override
+ public boolean supports(String serviceId) {
+ return startsWithIgnoreCase(serviceId, PROVIDERS_CATEGORY) ||
+ startsWithIgnoreCase(serviceId, CONSUMERS_CATEGORY);
+ }
+
+ @Override
+ public String createServiceId(URL url) {
+ String category = url.getParameter(Constants.CATEGORY_KEY, Constants.DEFAULT_CATEGORY);
+ if (!Objects.equals(category, PROVIDERS_CATEGORY) && !Objects.equals(category, CONSUMERS_CATEGORY)) {
+ category = PROVIDERS_CATEGORY;
+ }
+ return createServiceId(url, category);
+ }
+
+ @Override
+ public ConfigurableApplicationContext getContext() {
+ return context;
+ }
+
+ /**
+ * This method maybe override by sub-class.
+ *
+ * @param url The Dubbo's {@link URL}
+ * @param category The category
+ * @return
+ */
+ protected String createServiceId(URL url, String category) {
+ StringBuilder serviceNameBuilder = new StringBuilder(category);
+ appendIfPresent(serviceNameBuilder, url, Constants.INTERFACE_KEY);
+ appendIfPresent(serviceNameBuilder, url, Constants.VERSION_KEY);
+ appendIfPresent(serviceNameBuilder, url, Constants.GROUP_KEY);
+ return serviceNameBuilder.toString();
+ }
+
+ private static void appendIfPresent(StringBuilder target, URL url, String parameterName) {
+ String parameterValue = url.getParameter(parameterName);
+ appendIfPresent(target, parameterValue);
+ }
+
+ private static void appendIfPresent(StringBuilder target, String parameterValue) {
+ if (StringUtils.hasText(parameterValue)) {
+ target.append(SERVICE_NAME_SEPARATOR).append(parameterValue);
+ }
+ }
+}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/hashicorp/consul/ConsulRegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/hashicorp/consul/ConsulRegistrationFactory.java
index 89c19acfe..8fd93a658 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/hashicorp/consul/ConsulRegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/hashicorp/consul/ConsulRegistrationFactory.java
@@ -16,16 +16,15 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry.hashicorp.consul;
-import com.alibaba.dubbo.common.URL;
-
import com.ecwid.consul.v1.agent.model.NewService;
+import org.apache.dubbo.common.URL;
import org.springframework.cloud.alibaba.dubbo.registry.AbstractRegistrationFactory;
import org.springframework.cloud.alibaba.dubbo.registry.RegistrationFactory;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.consul.discovery.ConsulDiscoveryProperties;
import org.springframework.cloud.consul.discovery.ConsulServerUtils;
import org.springframework.cloud.consul.serviceregistry.ConsulRegistration;
-import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
import java.util.LinkedHashSet;
import java.util.LinkedList;
@@ -41,9 +40,7 @@ import java.util.Set;
public class ConsulRegistrationFactory extends AbstractRegistrationFactory {
@Override
- public ConsulRegistration create(String serviceName, URL url, ApplicationContext applicationContext) {
- ServiceInstance serviceInstance = createServiceInstance(serviceName, url);
-
+ protected ConsulRegistration create(URL url, ConfigurableApplicationContext applicationContext, ServiceInstance serviceInstance) {
Map metadata = getMetadata(serviceInstance);
List tags = createTags(metadata);
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/netflix/eureka/EurekaRegistrationFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/netflix/eureka/EurekaRegistrationFactory.java
index af54039a3..486154f59 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/netflix/eureka/EurekaRegistrationFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/registry/netflix/eureka/EurekaRegistrationFactory.java
@@ -16,10 +16,9 @@
*/
package org.springframework.cloud.alibaba.dubbo.registry.netflix.eureka;
-import com.alibaba.dubbo.common.URL;
-
import com.netflix.appinfo.HealthCheckHandler;
import com.netflix.discovery.EurekaClientConfig;
+import org.apache.dubbo.common.URL;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.cloud.alibaba.dubbo.registry.AbstractRegistrationFactory;
@@ -28,7 +27,7 @@ import org.springframework.cloud.commons.util.InetUtils;
import org.springframework.cloud.netflix.eureka.CloudEurekaInstanceConfig;
import org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean;
import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaRegistration;
-import org.springframework.context.ApplicationContext;
+import org.springframework.context.ConfigurableApplicationContext;
/**
* {@link EurekaRegistration} Factory
@@ -38,8 +37,7 @@ import org.springframework.context.ApplicationContext;
public class EurekaRegistrationFactory extends AbstractRegistrationFactory {
@Override
- public EurekaRegistration create(String serviceName, URL url, ApplicationContext applicationContext) {
- ServiceInstance serviceInstance = createServiceInstance(serviceName, url);
+ protected EurekaRegistration create(URL url, ConfigurableApplicationContext applicationContext, ServiceInstance serviceInstance) {
CloudEurekaInstanceConfig cloudEurekaInstanceConfig = applicationContext.getBean(CloudEurekaInstanceConfig.class);
ObjectProvider healthCheckHandler = applicationContext.getBeanProvider(HealthCheckHandler.class);
EurekaClientConfig eurekaClientConfig = applicationContext.getBean(EurekaClientConfig.class);
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java
index 5bf8c691d..640fc009d 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceExecutionContext.java
@@ -16,7 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import org.apache.dubbo.rpc.service.GenericService;
/**
* Dubbo {@link GenericService} execution context
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java
index f85fbac87..e15bbb692 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboGenericServiceFactory.java
@@ -16,9 +16,9 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
-import com.alibaba.dubbo.config.spring.ReferenceBean;
-import com.alibaba.dubbo.rpc.service.GenericService;
-
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.config.spring.ReferenceBean;
+import org.apache.dubbo.rpc.service.GenericService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.alibaba.dubbo.metadata.DubboServiceMetadata;
@@ -31,12 +31,10 @@ import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
-import static com.alibaba.dubbo.common.Constants.DEFAULT_CLUSTER;
-import static com.alibaba.dubbo.common.Constants.DEFAULT_PROTOCOL;
-import static org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistry.getServiceGroup;
-import static org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistry.getServiceInterface;
-import static org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistry.getServiceSegments;
-import static org.springframework.cloud.alibaba.dubbo.registry.SpringCloudRegistry.getServiceVersion;
+import static org.apache.dubbo.common.Constants.DEFAULT_CLUSTER;
+import static org.apache.dubbo.common.Constants.DEFAULT_PROTOCOL;
+import static org.apache.dubbo.common.Constants.GROUP_KEY;
+import static org.apache.dubbo.common.Constants.VERSION_KEY;
/**
* Dubbo {@link GenericService} Factory
@@ -67,11 +65,11 @@ public class DubboGenericServiceFactory {
private ReferenceBean build(ServiceRestMetadata serviceRestMetadata,
DubboTransportedMetadata dubboTransportedMetadata) {
- String dubboServiceName = serviceRestMetadata.getName();
- String[] segments = getServiceSegments(dubboServiceName);
- String interfaceName = getServiceInterface(segments);
- String version = getServiceVersion(segments);
- String group = getServiceGroup(segments);
+ String urlValue = serviceRestMetadata.getUrl();
+ URL url = URL.valueOf(urlValue);
+ String interfaceName = url.getServiceInterface();
+ String version = url.getParameter(VERSION_KEY);
+ String group = url.getParameter(GROUP_KEY);
String protocol = dubboTransportedMetadata.getProtocol();
String cluster = dubboTransportedMetadata.getCluster();
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataConfigServiceInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataConfigServiceInvocationHandler.java
index 94014d774..8f3548578 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataConfigServiceInvocationHandler.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataConfigServiceInvocationHandler.java
@@ -16,7 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
-import com.alibaba.dubbo.rpc.service.GenericService;
+import org.apache.dubbo.rpc.service.GenericService;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataConfigService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataConfigService.java
index 799e7caa4..fa49e94bb 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataConfigService.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataConfigService.java
@@ -16,8 +16,6 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
-import com.alibaba.dubbo.config.annotation.Service;
-
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@@ -28,15 +26,13 @@ import javax.annotation.PostConstruct;
import java.util.LinkedHashSet;
import java.util.Set;
-import static org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboMetadataAutoConfiguration.METADATA_PROTOCOL_BEAN_NAME;
+import static org.springframework.util.ObjectUtils.isEmpty;
/**
* Publishing {@link DubboMetadataConfigService} implementation
*
* @author Mercy
*/
-@Service(version = "${spring.application.name}", protocol = METADATA_PROTOCOL_BEAN_NAME)
-// Use current Spring application name as the Dubbo Service version
public class PublishingDubboMetadataConfigService implements DubboMetadataConfigService {
/**
@@ -69,7 +65,9 @@ public class PublishingDubboMetadataConfigService implements DubboMetadataConfig
public String getServiceRestMetadata() {
String serviceRestMetadataJsonConfig = null;
try {
- serviceRestMetadataJsonConfig = objectMapper.writeValueAsString(serviceRestMetadata);
+ if (!isEmpty(serviceRestMetadata)) {
+ serviceRestMetadataJsonConfig = objectMapper.writeValueAsString(serviceRestMetadata);
+ }
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java
index 58ed2263a..93a28264d 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/parameter/DubboGenericServiceParameterResolver.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.service.parameter;
-import com.alibaba.dubbo.rpc.service.GenericService;
-
+import org.apache.dubbo.rpc.service.GenericService;
import org.springframework.cloud.alibaba.dubbo.http.HttpServerRequest;
import org.springframework.cloud.alibaba.dubbo.metadata.MethodParameterMetadata;
import org.springframework.cloud.alibaba.dubbo.metadata.RestMethodMetadata;
diff --git a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
index f90bb175a..ed1c9c3f4 100644
--- a/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
+++ b/spring-cloud-alibaba-dubbo/src/main/resources/META-INF/spring.factories
@@ -1,7 +1,7 @@
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboMetadataAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboOpenFeignAutoConfiguration,\
- org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboRestMetadataRegistrationAutoConfiguration,\
+ org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboMetadataEventHandlingAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboLoadBalancedRestTemplateAutoConfiguration,\
org.springframework.cloud.alibaba.dubbo.autoconfigure.DubboServiceAutoConfiguration
@@ -9,7 +9,6 @@ org.springframework.context.ApplicationContextInitializer=\
org.springframework.cloud.alibaba.dubbo.context.DubboServiceRegistrationApplicationContextInitializer
org.springframework.cloud.alibaba.dubbo.registry.RegistrationFactory=\
- org.springframework.cloud.alibaba.dubbo.registry.DefaultRegistrationFactory,\
org.springframework.cloud.alibaba.dubbo.registry.netflix.eureka.EurekaRegistrationFactory,\
org.springframework.cloud.alibaba.dubbo.registry.apache.zookeeper.ZookeeperRegistrationFactory,\
org.springframework.cloud.alibaba.dubbo.registry.hashicorp.consul.ConsulRegistrationFactory
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties
index 10f45c59a..68b91d012 100644
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties
@@ -5,5 +5,5 @@ mysql.server.ip=127.0.0.1
mysql.server.port=3306
mysql.db.name=demo
-mysql.user.name=xxxxx
-mysql.user.password=xxxxx
\ No newline at end of file
+mysql.user.name=root
+mysql.user.password=123456
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java b/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
index 2e0e0f81c..546392d15 100644
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
+++ b/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
@@ -16,11 +16,6 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import java.sql.Connection;
-import java.sql.PreparedStatement;
-import java.sql.SQLException;
-import java.util.Random;
-
import com.alibaba.fescar.core.context.RootContext;
import org.slf4j.Logger;
@@ -40,92 +35,97 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.util.Random;
+
/**
* @author xiaojing
*/
@RestController
public class OrderController {
- private static final Logger LOGGER = LoggerFactory.getLogger(OrderController.class);
- private static final String SUCCESS = "SUCCESS";
- private static final String FAIL = "FAIL";
- private static final String USER_ID = "U100001";
- private static final String COMMODITY_CODE = "C00321";
+ private static final Logger LOGGER = LoggerFactory.getLogger(OrderController.class);
+ private static final String SUCCESS = "SUCCESS";
+ private static final String FAIL = "FAIL";
+ private static final String USER_ID = "U100001";
+ private static final String COMMODITY_CODE = "C00321";
- private final JdbcTemplate jdbcTemplate;
- private final RestTemplate restTemplate;
- private Random random;
+ private final JdbcTemplate jdbcTemplate;
+ private final RestTemplate restTemplate;
+ private Random random;
- public OrderController(JdbcTemplate jdbcTemplate, RestTemplate restTemplate) {
- this.jdbcTemplate = jdbcTemplate;
- this.restTemplate = restTemplate;
- this.random = new Random();
- }
+ public OrderController(JdbcTemplate jdbcTemplate, RestTemplate restTemplate) {
+ this.jdbcTemplate = jdbcTemplate;
+ this.restTemplate = restTemplate;
+ this.random = new Random();
+ }
- @RequestMapping(value = "/order", method = RequestMethod.POST, produces = "application/json")
- public String order(String userId, String commodityCode, int orderCount) {
- LOGGER.info("Order Service Begin ... xid: " + RootContext.getXID());
+ @RequestMapping(value = "/order", method = RequestMethod.POST, produces = "application/json")
+ public String order(String userId, String commodityCode, int orderCount) {
+ LOGGER.info("Order Service Begin ... xid: " + RootContext.getXID());
- int orderMoney = calculate(commodityCode, orderCount);
+ int orderMoney = calculate(commodityCode, orderCount);
- invokerAccountService(orderMoney);
+ invokerAccountService(orderMoney);
- final Order order = new Order();
- order.userId = userId;
- order.commodityCode = commodityCode;
- order.count = orderCount;
- order.money = orderMoney;
+ final Order order = new Order();
+ order.userId = userId;
+ order.commodityCode = commodityCode;
+ order.count = orderCount;
+ order.money = orderMoney;
- KeyHolder keyHolder = new GeneratedKeyHolder();
+ KeyHolder keyHolder = new GeneratedKeyHolder();
- int result = jdbcTemplate.update(new PreparedStatementCreator() {
+ int result = jdbcTemplate.update(new PreparedStatementCreator() {
- @Override
- public PreparedStatement createPreparedStatement(Connection con)
- throws SQLException {
- PreparedStatement pst = con.prepareStatement(
- "insert into order_tbl (user_id, commodity_code, count, money) values (?, ?, ?, ?)",
- PreparedStatement.RETURN_GENERATED_KEYS);
- pst.setObject(1, order.userId);
- pst.setObject(2, order.commodityCode);
- pst.setObject(3, order.count);
- pst.setObject(4, order.money);
- return pst;
- }
- }, keyHolder);
+ @Override
+ public PreparedStatement createPreparedStatement(Connection con)
+ throws SQLException {
+ PreparedStatement pst = con.prepareStatement(
+ "insert into order_tbl (user_id, commodity_code, count, money) values (?, ?, ?, ?)",
+ PreparedStatement.RETURN_GENERATED_KEYS);
+ pst.setObject(1, order.userId);
+ pst.setObject(2, order.commodityCode);
+ pst.setObject(3, order.count);
+ pst.setObject(4, order.money);
+ return pst;
+ }
+ }, keyHolder);
- order.id = (long) keyHolder.getKey();
+ order.id = keyHolder.getKey().longValue();
- if (random.nextBoolean()) {
- throw new RuntimeException("this is a mock Exception");
- }
+// if (random.nextBoolean()) {
+// throw new RuntimeException("this is a mock Exception");
+// }
- LOGGER.info("Order Service End ... Created " + order);
+ LOGGER.info("Order Service End ... Created " + order);
- if (result == 1) {
- return SUCCESS;
- }
- return FAIL;
- }
+ if (result == 1) {
+ return SUCCESS;
+ }
+ return FAIL;
+ }
- private int calculate(String commodityId, int orderCount) {
- return 2 * orderCount;
- }
+ private int calculate(String commodityId, int orderCount) {
+ return 2 * orderCount;
+ }
- private void invokerAccountService(int orderMoney) {
- String url = "http://127.0.0.1:18084/account";
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
+ private void invokerAccountService(int orderMoney) {
+ String url = "http://127.0.0.1:18084/account";
+ HttpHeaders headers = new HttpHeaders();
+ headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
- MultiValueMap map = new LinkedMultiValueMap();
+ MultiValueMap map = new LinkedMultiValueMap();
- map.add("userId", USER_ID);
- map.add("money", orderMoney + "");
+ map.add("userId", USER_ID);
+ map.add("money", orderMoney + "");
- HttpEntity> request = new HttpEntity>(
- map, headers);
+ HttpEntity> request = new HttpEntity>(
+ map, headers);
- ResponseEntity response = restTemplate.postForEntity(url, request,
- String.class);
- }
+ ResponseEntity response = restTemplate.postForEntity(url, request,
+ String.class);
+ }
}
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties
index f3e417d8d..c88342af9 100644
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties
@@ -5,5 +5,5 @@ mysql.server.ip=127.0.0.1
mysql.server.port=3306
mysql.db.name=demo
-mysql.user.name=xxxxx
-mysql.user.password=xxxxx
\ No newline at end of file
+mysql.user.name=root
+mysql.user.password=123456
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties
index 832eaecdf..b65047c80 100644
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties
@@ -5,5 +5,5 @@ mysql.server.ip=127.0.0.1
mysql.server.port=3306
mysql.db.name=demo
-mysql.user.name=xxxxx
-mysql.user.password=xxxxx
\ No newline at end of file
+mysql.user.name=root
+mysql.user.password=123456
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml
index 6af752d72..2aa37cf63 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-discovery-example/pom.xml
@@ -19,7 +19,6 @@
org.springframework.cloud
spring-cloud-starter-gateway
- 2.0.2.RELEASE
diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml
index f466cc669..d405a38d1 100644
--- a/spring-cloud-alibaba-examples/sms-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sms-example/pom.xml
@@ -3,47 +3,22 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
- alibaba.com
sms-example
- 0.0.1-SNAPSHOT
jar
-
- sms-example
- Demo project for Spring Boot
+ Example demonstrating how to use alicloud sms
- org.springframework.boot
- spring-boot-starter-parent
- 2.0.6.RELEASE
-
+ spring-cloud-alibaba-examples
+ org.springframework.cloud
+ 0.2.2.BUILD-SNAPSHOT
+ ../pom.xml
UTF-8
UTF-8
- 1.8
- Finchley.SR2
- 0.2.2.BUILD-SNAPSHOT
-
-
-
- org.springframework.cloud
- spring-cloud-dependencies
- ${spring-cloud.version}
- pom
- import
-
-
- org.springframework.cloud
- spring-cloud-alibaba-dependencies
- ${spring-cloud-alibaba-alicloud.version}
- pom
- import
-
-
-
@@ -59,11 +34,6 @@
org.springframework.cloud
spring-cloud-starter-alicloud-sms
-
- alibaba.com
- env-extension
- 0.2.2.BUILD-SNAPSHOT
-
@@ -72,6 +42,14 @@
org.springframework.boot
spring-boot-maven-plugin
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ ${maven-deploy-plugin.version}
+
+ true
+
+
diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java
index 83f25a94a..abbd8efb7 100644
--- a/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java
+++ b/spring-cloud-alibaba-examples/sms-example/src/main/java/org/springframework/cloud/alibaba/cloud/example/SmsApplication.java
@@ -15,7 +15,6 @@
*/
package org.springframework.cloud.alibaba.cloud.example;
-import org.springframework.alicloud.env.extension.ImportExtraConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -23,7 +22,6 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
*
*/
@SpringBootApplication
-@ImportExtraConfig(name = "/Users/toava/sms.properties")
public class SmsApplication {
public static void main(String[] args) throws Exception{
diff --git a/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties
index 8c689827a..4464cfe94 100644
--- a/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/sms-example/src/main/resources/application.properties
@@ -1,4 +1,9 @@
spring.application.name=sca-sms-example
server.port=9051
-# config management
+# config sms
+spring.cloud.alicloud.access-key=*****
+spring.cloud.alicloud.secret-key=******
+spring.cloud.alicloud.sms.report-queue-name=*****
+spring.cloud.alicloud.sms.up-queue-name=*****
+#config endpoint
management.endpoints.web.exposure.include=*
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml
index 93f33466c..34dd0cee4 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/pom.xml
@@ -22,9 +22,7 @@
- 2.6.5
- 0.2.1.RELEASE
- 0.0.2
+ 2.7.0
2.1.0.RELEASE
2.1.0.RELEASE
4.0.1
@@ -44,7 +42,7 @@
- com.alibaba
+ org.apache.dubbo
dubbo-dependencies-bom
${dubbo.version}
pom
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
index 2d72b79fe..13a5c4331 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudConsumerBootstrap.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.bootstrap;
-import com.alibaba.dubbo.config.annotation.Reference;
-
+import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.ApplicationRunner;
@@ -95,7 +94,7 @@ public class DubboSpringCloudConsumerBootstrap {
}
@FeignClient("${provider.application.name}")
- @DubboTransported
+ @DubboTransported()
public interface DubboFeignRestService {
@GetMapping(value = "/param")
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
index 83d0d8354..d2b72d471 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/src/main/resources/application.yaml
@@ -1,5 +1,8 @@
dubbo:
registry:
- address: spring-cloud://nacos
+# The Spring Cloud Dubbo's registry extension
+ address: spring-cloud://localhost
+# The traditional Dubbo's registry
+# address: zookeeper://127.0.0.1:2181
server:
port: 7070
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java
index 642fdb0d2..1f910a382 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/StandardRestService.java
@@ -16,8 +16,7 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
-import com.alibaba.dubbo.rpc.RpcContext;
-
+import org.apache.dubbo.rpc.RpcContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
@@ -48,7 +47,7 @@ import static org.springframework.util.MimeTypeUtils.APPLICATION_JSON_VALUE;
*
* @author Mercy
*/
-@com.alibaba.dubbo.config.annotation.Service(version = "1.0.0", protocol = {"dubbo", "rest"})
+@org.apache.dubbo.config.annotation.Service(version = "1.0.0", protocol = {"dubbo", "rest"})
@RestController
@Path("/")
public class StandardRestService implements RestService {
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
index 2b3eb54e9..0f6094acb 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/application.yaml
@@ -10,7 +10,10 @@ dubbo:
port: 8081
server: netty
registry:
- address: spring-cloud://nacos
+# The Spring Cloud Dubbo's registry extension
+ address: spring-cloud://localhost
+# The traditional Dubbo's registry
+# address: zookeeper://127.0.0.1:2181
feign:
hystrix:
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
index c845d8ca1..3af263251 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/resources/bootstrap.yaml
@@ -4,6 +4,7 @@ spring:
main:
allow-bean-definition-overriding: true
+
# default disable all
cloud:
nacos:
diff --git a/spring-cloud-alibaba-fescar/src/main/java/org/springframework/cloud/alibaba/fescar/rest/FescarRestTemplateAutoConfiguration.java b/spring-cloud-alibaba-fescar/src/main/java/org/springframework/cloud/alibaba/fescar/rest/FescarRestTemplateAutoConfiguration.java
index 91191ed0d..11fde4df4 100644
--- a/spring-cloud-alibaba-fescar/src/main/java/org/springframework/cloud/alibaba/fescar/rest/FescarRestTemplateAutoConfiguration.java
+++ b/spring-cloud-alibaba-fescar/src/main/java/org/springframework/cloud/alibaba/fescar/rest/FescarRestTemplateAutoConfiguration.java
@@ -31,18 +31,17 @@
package org.springframework.cloud.alibaba.fescar.rest;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
-import javax.annotation.PostConstruct;
-
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.web.client.RestTemplate;
+import javax.annotation.PostConstruct;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
/**
* @author xiaojing
*/
diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
index 5d13c01c5..666051459 100644
--- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
+++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/NacosConfigProperties.java
@@ -122,8 +122,6 @@ public class NacosConfigProperties {
private String name;
- private String[] activeProfiles;
-
/**
* the dataids for configurable multiple shared configurations , multiple separated by
* commas .
@@ -145,11 +143,6 @@ public class NacosConfigProperties {
@Autowired
private Environment environment;
- @PostConstruct
- public void init() {
- this.activeProfiles = environment.getActiveProfiles();
- }
-
// todo sts support
public boolean isEnabled() {
@@ -260,10 +253,6 @@ public class NacosConfigProperties {
return name;
}
- public String[] getActiveProfiles() {
- return activeProfiles;
- }
-
public String getSharedDataids() {
return sharedDataids;
}
@@ -292,10 +281,6 @@ public class NacosConfigProperties {
this.name = name;
}
- public void setActiveProfiles(String[] activeProfiles) {
- this.activeProfiles = activeProfiles;
- }
-
public static class Config {
/**
* the data id of extended configuration
@@ -344,8 +329,7 @@ public class NacosConfigProperties {
+ endpoint + '\'' + ", namespace='" + namespace + '\'' + ", accessKey='"
+ accessKey + '\'' + ", secretKey='" + secretKey + '\''
+ ", contextPath='" + contextPath + '\'' + ", clusterName='" + clusterName
- + '\'' + ", name='" + name + '\'' + ", activeProfiles="
- + Arrays.toString(activeProfiles) + ", sharedDataids='" + sharedDataids
+ + '\'' + ", name='" + name + '\'' + ", sharedDataids='" + sharedDataids
+ '\'' + ", refreshableDataids='" + refreshableDataids + '\''
+ ", extConfig=" + extConfig + '}';
}
diff --git a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
index 4c5606583..306066eb6 100644
--- a/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
+++ b/spring-cloud-alibaba-nacos-config/src/main/java/org/springframework/cloud/alibaba/nacos/client/NacosPropertySourceLocator.java
@@ -71,7 +71,6 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
timeout);
String name = nacosConfigProperties.getName();
- String nacosGroup = nacosConfigProperties.getGroup();
String dataIdPrefix = nacosConfigProperties.getPrefix();
if (StringUtils.isEmpty(dataIdPrefix)) {
dataIdPrefix = name;
@@ -81,17 +80,12 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
dataIdPrefix = env.getProperty("spring.application.name");
}
- List profiles = Arrays.asList(env.getActiveProfiles());
- nacosConfigProperties.setActiveProfiles(profiles.toArray(new String[0]));
-
- String fileExtension = nacosConfigProperties.getFileExtension();
-
CompositePropertySource composite = new CompositePropertySource(
NACOS_PROPERTY_SOURCE_NAME);
loadSharedConfiguration(composite);
loadExtConfiguration(composite);
- loadApplicationConfiguration(composite, nacosGroup, dataIdPrefix, fileExtension);
+ loadApplicationConfiguration(composite, dataIdPrefix, nacosConfigProperties, env);
return composite;
}
@@ -152,11 +146,15 @@ public class NacosPropertySourceLocator implements PropertySourceLocator {
}
private void loadApplicationConfiguration(
- CompositePropertySource compositePropertySource, String nacosGroup,
- String dataIdPrefix, String fileExtension) {
+ CompositePropertySource compositePropertySource, String dataIdPrefix,
+ NacosConfigProperties properties, Environment environment) {
+
+ String fileExtension = properties.getFileExtension();
+ String nacosGroup = properties.getGroup();
+
loadNacosDataIfPresent(compositePropertySource,
dataIdPrefix + DOT + fileExtension, nacosGroup, fileExtension, true);
- for (String profile : nacosConfigProperties.getActiveProfiles()) {
+ for (String profile : environment.getActiveProfiles()) {
String dataId = dataIdPrefix + SEP1 + profile + DOT + fileExtension;
loadNacosDataIfPresent(compositePropertySource, dataId, nacosGroup,
fileExtension, true);
diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java
index 024ddbc4c..cc7098b14 100644
--- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java
+++ b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationExtConfigTests.java
@@ -16,15 +16,12 @@
package org.springframework.cloud.alibaba.nacos;
-import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.springframework.boot.test.context.SpringBootTest.WebEnvironment.NONE;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
-import java.util.Map;
-
import com.alibaba.nacos.client.config.NacosConfigService;
import org.junit.Assert;
@@ -42,7 +39,6 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cloud.alibaba.nacos.client.NacosPropertySourceLocator;
import org.springframework.cloud.alibaba.nacos.endpoint.NacosConfigEndpointAutoConfiguration;
-import org.springframework.cloud.alibaba.nacos.refresh.NacosRefreshHistory;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.test.context.junit4.SpringRunner;
diff --git a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java
index 8a4bdda6e..fc2a3b124 100644
--- a/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java
+++ b/spring-cloud-alibaba-nacos-config/src/test/java/org/springframework/cloud/alibaba/nacos/NacosConfigurationTests.java
@@ -163,13 +163,10 @@ public class NacosConfigurationTests {
checkoutNacosConfigFileExtension();
checkoutNacosConfigTimeout();
checkoutNacosConfigEncode();
- checkoutNacosConfigProfiles();
- checkoutNacosConfigExtConfig();
checkoutEndpoint();
+ checkoutDataLoad();
- Assert.assertEquals(environment.getProperty("user.name"), "dev");
- Assert.assertEquals(environment.getProperty("user.age"), "12");
}
private void checkoutNacosConfigServerAddr() {
@@ -235,20 +232,10 @@ public class NacosConfigurationTests {
properties.getEncode());
}
- private void checkoutNacosConfigExtConfig() {
- assertEquals("NacosConfigProperties' ext config is wrong",
- "ext-config-common01.properties",
- properties.getExtConfig().get(0).getDataId());
- assertEquals("NacosConfigProperties' ext config is wrong",
- "ext-config-common02.properties",
- properties.getExtConfig().get(1).getDataId());
- assertEquals("NacosConfigProperties' ext config is wrong", "GLOBAL_GROUP",
- properties.getExtConfig().get(1).getGroup());
- }
+ private void checkoutDataLoad() {
- private void checkoutNacosConfigProfiles() {
- assertEquals("NacosConfigProperties' profiles is wrong",
- new String[] { "dev", "test" }, properties.getActiveProfiles());
+ Assert.assertEquals(environment.getProperty("user.name"), "dev");
+ Assert.assertEquals(environment.getProperty("user.age"), "12");
}
private void checkoutEndpoint() throws Exception {
diff --git a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
index 4bedab5cc..ccf2e838b 100644
--- a/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
+++ b/spring-cloud-alibaba-nacos-discovery/src/main/java/org/springframework/cloud/alibaba/nacos/discovery/NacosDiscoveryClient.java
@@ -18,6 +18,7 @@ package org.springframework.cloud.alibaba.nacos.discovery;
import com.alibaba.nacos.api.naming.pojo.Instance;
import com.alibaba.nacos.api.naming.pojo.ListView;
+
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.alibaba.nacos.NacosDiscoveryProperties;
@@ -25,7 +26,11 @@ import org.springframework.cloud.alibaba.nacos.NacosServiceInstance;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
/**
* @author xiaojing
@@ -33,75 +38,74 @@ import java.util.*;
*/
public class NacosDiscoveryClient implements DiscoveryClient {
- private static final Logger log = LoggerFactory
- .getLogger(NacosDiscoveryClient.class);
- public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client";
-
- private NacosDiscoveryProperties discoveryProperties;
-
- public NacosDiscoveryClient(NacosDiscoveryProperties discoveryProperties) {
- this.discoveryProperties = discoveryProperties;
- }
-
- @Override
- public String description() {
- return DESCRIPTION;
- }
-
- @Override
- public List getInstances(String serviceId) {
- try {
- List instances = discoveryProperties.namingServiceInstance()
- .selectInstances(serviceId, true);
- return hostToServiceInstanceList(instances, serviceId);
- }
- catch (Exception e) {
- throw new RuntimeException(
- "Can not get hosts from nacos server. serviceId: " + serviceId, e);
- }
- }
-
- private static ServiceInstance hostToServiceInstance(Instance instance,
- String serviceId) {
- NacosServiceInstance nacosServiceInstance = new NacosServiceInstance();
- nacosServiceInstance.setHost(instance.getIp());
- nacosServiceInstance.setPort(instance.getPort());
- nacosServiceInstance.setServiceId(serviceId);
- Map metadata = new HashMap<>();
- metadata.put("instanceId", instance.getInstanceId());
- metadata.put("weight", instance.getWeight() + "");
- metadata.put("healthy", instance.isHealthy() + "");
- metadata.put("cluster", instance.getClusterName() + "");
- metadata.putAll(instance.getMetadata());
- nacosServiceInstance.setMetadata(metadata);
-
- if (metadata.containsKey("secure")) {
- boolean secure = Boolean.parseBoolean(metadata.get("secure"));
- nacosServiceInstance.setSecure(secure);
- }
- return nacosServiceInstance;
- }
-
- private static List hostToServiceInstanceList(
- List instances, String serviceId) {
- List result = new ArrayList<>(instances.size());
- for (Instance instance : instances) {
- result.add(hostToServiceInstance(instance, serviceId));
- }
- return result;
- }
-
- @Override
- public List getServices() {
-
- try {
- ListView services = discoveryProperties.namingServiceInstance()
- .getServicesOfServer(1, Integer.MAX_VALUE);
- return services.getData();
- }
- catch (Exception e) {
- log.error("get service name from nacos server fail,", e);
- return Collections.emptyList();
- }
- }
+ private static final Logger log = LoggerFactory
+ .getLogger(NacosDiscoveryClient.class);
+ public static final String DESCRIPTION = "Spring Cloud Nacos Discovery Client";
+
+ private NacosDiscoveryProperties discoveryProperties;
+
+ public NacosDiscoveryClient(NacosDiscoveryProperties discoveryProperties) {
+ this.discoveryProperties = discoveryProperties;
+ }
+
+ @Override
+ public String description() {
+ return DESCRIPTION;
+ }
+
+ @Override
+ public List getInstances(String serviceId) {
+ try {
+ List instances = discoveryProperties.namingServiceInstance()
+ .selectInstances(serviceId, true);
+ return hostToServiceInstanceList(instances, serviceId);
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Can not get hosts from nacos server. serviceId: " + serviceId, e);
+ }
+ }
+
+ private static ServiceInstance hostToServiceInstance(Instance instance,
+ String serviceId) {
+ NacosServiceInstance nacosServiceInstance = new NacosServiceInstance();
+ nacosServiceInstance.setHost(instance.getIp());
+ nacosServiceInstance.setPort(instance.getPort());
+ nacosServiceInstance.setServiceId(serviceId);
+
+ Map metadata = new HashMap<>();
+ metadata.put("nacos.instanceId", instance.getInstanceId());
+ metadata.put("nacos.weight", instance.getWeight() + "");
+ metadata.put("nacos.healthy", instance.isHealthy() + "");
+ metadata.put("nacos.cluster", instance.getClusterName() + "");
+ metadata.putAll(instance.getMetadata());
+ nacosServiceInstance.setMetadata(metadata);
+
+ if (metadata.containsKey("secure")) {
+ boolean secure = Boolean.parseBoolean(metadata.get("secure"));
+ nacosServiceInstance.setSecure(secure);
+ }
+ return nacosServiceInstance;
+ }
+
+ private static List hostToServiceInstanceList(
+ List instances, String serviceId) {
+ List result = new ArrayList<>(instances.size());
+ for (Instance instance : instances) {
+ result.add(hostToServiceInstance(instance, serviceId));
+ }
+ return result;
+ }
+
+ @Override
+ public List getServices() {
+
+ try {
+ ListView services = discoveryProperties.namingServiceInstance()
+ .getServicesOfServer(1, Integer.MAX_VALUE);
+ return services.getData();
+ } catch (Exception e) {
+ log.error("get service name from nacos server fail,", e);
+ return Collections.emptyList();
+ }
+ }
}
diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java
index 73d4cf797..35577cae7 100644
--- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java
+++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/SentinelZuulAutoConfiguration.java
@@ -16,6 +16,17 @@
package org.springframework.cloud.alibaba.sentinel.zuul;
+import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoConfiguration.PREFIX;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
+import org.springframework.cloud.alibaba.sentinel.zuul.handler.FallBackProviderHandler;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.env.Environment;
+
import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultRequestOriginParser;
import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultUrlCleaner;
import com.alibaba.csp.sentinel.adapter.zuul.fallback.RequestOriginParser;
@@ -25,17 +36,8 @@ import com.alibaba.csp.sentinel.adapter.zuul.filters.SentinelPostFilter;
import com.alibaba.csp.sentinel.adapter.zuul.filters.SentinelPreFilter;
import com.alibaba.csp.sentinel.adapter.zuul.properties.SentinelZuulProperties;
import com.alibaba.csp.sentinel.util.StringUtil;
-import com.netflix.zuul.ZuulFilter;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderListener;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.core.env.Environment;
-import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoConfiguration.PREFIX;
+import com.netflix.zuul.ZuulFilter;
/**
* Sentinel Spring Cloud Zuul AutoConfiguration
@@ -43,68 +45,70 @@ import static org.springframework.cloud.alibaba.sentinel.zuul.SentinelZuulAutoCo
* @author tiger
*/
@Configuration
-@ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true")
+@ConditionalOnProperty(prefix = PREFIX, name = "enabled", havingValue = "true", matchIfMissing = true)
public class SentinelZuulAutoConfiguration {
- @Autowired
- private Environment environment;
-
- public static final String PREFIX = "spring.cloud.alibaba.sentinel.zuul";
-
- @Bean
- public SentinelZuulProperties sentinelZuulProperties() {
- SentinelZuulProperties properties = new SentinelZuulProperties();
- String enabledStr = environment.getProperty(PREFIX + "." + "enabled");
- String preOrderStr = environment.getProperty(PREFIX + "." + "order.pre");
- String postOrderStr = environment.getProperty(PREFIX + "." + "order.post");
- String errorOrderStr = environment.getProperty(PREFIX + "." + "order.error");
- if (StringUtil.isNotEmpty(enabledStr)) {
- Boolean enabled = Boolean.valueOf(enabledStr);
- properties.setEnabled(enabled);
- }
- if (StringUtil.isNotEmpty(preOrderStr)) {
- properties.getOrder().setPre(Integer.parseInt(preOrderStr));
- }
- if (StringUtil.isNotEmpty(postOrderStr)) {
- properties.getOrder().setPost(Integer.parseInt(postOrderStr));
- }
- if (StringUtil.isNotEmpty(errorOrderStr)) {
- properties.getOrder().setError(Integer.parseInt(errorOrderStr));
- }
- return properties;
- }
-
- @Bean
- @ConditionalOnMissingBean(UrlCleaner.class)
- public UrlCleaner urlCleaner(){
- return new DefaultUrlCleaner();
- }
-
- @Bean
- @ConditionalOnMissingBean(RequestOriginParser.class)
- public RequestOriginParser requestOriginParser(){
- return new DefaultRequestOriginParser();
- }
-
- @Bean
- public ZuulFilter preFilter(SentinelZuulProperties sentinelZuulProperties,UrlCleaner urlCleaner,
- RequestOriginParser requestOriginParser) {
- return new SentinelPreFilter(sentinelZuulProperties,urlCleaner,requestOriginParser);
- }
-
- @Bean
- public ZuulFilter postFilter(SentinelZuulProperties sentinelZuulProperties) {
- return new SentinelPostFilter(sentinelZuulProperties);
- }
-
- @Bean
- public ZuulFilter errorFilter(SentinelZuulProperties sentinelZuulProperties) {
- return new SentinelErrorFilter(sentinelZuulProperties);
- }
-
- @Bean
- public FallBackProviderListener fallBackProviderListener(DefaultListableBeanFactory beanFactory) {
- return new FallBackProviderListener(beanFactory);
- }
+ @Autowired
+ private Environment environment;
+
+ public static final String PREFIX = "spring.cloud.sentinel.zuul";
+
+ @Bean
+ public SentinelZuulProperties sentinelZuulProperties() {
+ SentinelZuulProperties properties = new SentinelZuulProperties();
+ String enabledStr = environment.getProperty(PREFIX + "." + "enabled");
+ String preOrderStr = environment.getProperty(PREFIX + "." + "order.pre");
+ String postOrderStr = environment.getProperty(PREFIX + "." + "order.post");
+ String errorOrderStr = environment.getProperty(PREFIX + "." + "order.error");
+ if (StringUtil.isNotEmpty(enabledStr)) {
+ Boolean enabled = Boolean.valueOf(enabledStr);
+ properties.setEnabled(enabled);
+ }
+ if (StringUtil.isNotEmpty(preOrderStr)) {
+ properties.getOrder().setPre(Integer.parseInt(preOrderStr));
+ }
+ if (StringUtil.isNotEmpty(postOrderStr)) {
+ properties.getOrder().setPost(Integer.parseInt(postOrderStr));
+ }
+ if (StringUtil.isNotEmpty(errorOrderStr)) {
+ properties.getOrder().setError(Integer.parseInt(errorOrderStr));
+ }
+ return properties;
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(UrlCleaner.class)
+ public UrlCleaner urlCleaner() {
+ return new DefaultUrlCleaner();
+ }
+
+ @Bean
+ @ConditionalOnMissingBean(RequestOriginParser.class)
+ public RequestOriginParser requestOriginParser() {
+ return new DefaultRequestOriginParser();
+ }
+
+ @Bean
+ public ZuulFilter preFilter(SentinelZuulProperties sentinelZuulProperties,
+ UrlCleaner urlCleaner, RequestOriginParser requestOriginParser) {
+ return new SentinelPreFilter(sentinelZuulProperties, urlCleaner,
+ requestOriginParser);
+ }
+
+ @Bean
+ public ZuulFilter postFilter(SentinelZuulProperties sentinelZuulProperties) {
+ return new SentinelPostFilter(sentinelZuulProperties);
+ }
+
+ @Bean
+ public ZuulFilter errorFilter(SentinelZuulProperties sentinelZuulProperties) {
+ return new SentinelErrorFilter(sentinelZuulProperties);
+ }
+
+ @Bean
+ public FallBackProviderHandler fallBackProviderListener(
+ DefaultListableBeanFactory beanFactory) {
+ return new FallBackProviderHandler(beanFactory);
+ }
}
diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java
new file mode 100644
index 000000000..564fc4467
--- /dev/null
+++ b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/handler/FallBackProviderHandler.java
@@ -0,0 +1,45 @@
+package org.springframework.cloud.alibaba.sentinel.zuul.handler;
+
+import java.util.Map;
+
+import org.apache.commons.collections.MapUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.SmartInitializingSingleton;
+import org.springframework.beans.factory.support.DefaultListableBeanFactory;
+
+import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultBlockFallbackProvider;
+import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackManager;
+import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackProvider;
+
+/**
+ * @author tiger
+ */
+public class FallBackProviderHandler implements SmartInitializingSingleton {
+
+ private static final Logger logger = LoggerFactory
+ .getLogger(FallBackProviderHandler.class);
+
+ private final DefaultListableBeanFactory beanFactory;
+
+ public FallBackProviderHandler(DefaultListableBeanFactory beanFactory) {
+ this.beanFactory = beanFactory;
+ }
+
+ @Override
+ public void afterSingletonsInstantiated() {
+ Map providerMap = beanFactory
+ .getBeansOfType(ZuulBlockFallbackProvider.class);
+ if (MapUtils.isNotEmpty(providerMap)) {
+ providerMap.forEach((k, v) -> {
+ logger.info("[Sentinel Zuul] Register provider name:{}, instance: {}", k,
+ v);
+ ZuulBlockFallbackManager.registerProvider(v);
+ });
+ }
+ else {
+ logger.info("[Sentinel Zuul] Register default fallback provider. ");
+ ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider());
+ }
+ }
+}
diff --git a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java b/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java
deleted file mode 100644
index d727a0e43..000000000
--- a/spring-cloud-alibaba-sentinel-zuul/src/main/java/org/springframework/cloud/alibaba/sentinel/zuul/listener/FallBackProviderListener.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package org.springframework.cloud.alibaba.sentinel.zuul.listener;
-
-import com.alibaba.csp.sentinel.adapter.zuul.fallback.DefaultBlockFallbackProvider;
-import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackManager;
-import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackProvider;
-import org.apache.commons.collections.MapUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.SmartInitializingSingleton;
-import org.springframework.beans.factory.support.DefaultListableBeanFactory;
-import org.springframework.boot.context.event.ApplicationStartedEvent;
-import org.springframework.context.event.EventListener;
-
-import java.util.Map;
-
-
-/**
- * @author tiger
- */
-public class FallBackProviderListener implements SmartInitializingSingleton {
-
- private static final Logger logger = LoggerFactory.getLogger(FallBackProviderListener.class);
-
- private final DefaultListableBeanFactory beanFactory;
-
- public FallBackProviderListener(DefaultListableBeanFactory beanFactory) {
- this.beanFactory = beanFactory;
- }
-
- @Override
- public void afterSingletonsInstantiated() {
- Map providerMap = beanFactory.getBeansOfType(ZuulBlockFallbackProvider.class);
- if (MapUtils.isNotEmpty(providerMap)) {
- providerMap.forEach((k, v) -> {
- logger.info("[Sentinel] Register provider name:{}, instance: {}", k, v);
- ZuulBlockFallbackManager.registerProvider(v);
- });
- } else {
- logger.info("[Sentinel] Register default fallback provider. ");
- ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider());
- }
- }
-}
diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java
index d4621bd7e..68cedb64f 100644
--- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java
+++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelProperties.java
@@ -16,17 +16,18 @@
package org.springframework.cloud.alibaba.sentinel;
-import com.alibaba.csp.sentinel.config.SentinelConfig;
-import com.alibaba.csp.sentinel.log.LogBase;
-import com.alibaba.csp.sentinel.transport.config.TransportConfig;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.alibaba.sentinel.datasource.config.DataSourcePropertiesConfiguration;
import org.springframework.core.Ordered;
import org.springframework.validation.annotation.Validated;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import com.alibaba.csp.sentinel.config.SentinelConfig;
+import com.alibaba.csp.sentinel.log.LogBase;
+import com.alibaba.csp.sentinel.transport.config.TransportConfig;
/**
* {@link ConfigurationProperties} for Sentinel.
@@ -306,6 +307,12 @@ public class SentinelProperties {
*/
private List urlPatterns;
+ /**
+ * Enable to instance
+ * {@link com.alibaba.csp.sentinel.adapter.servlet.CommonFilter}.
+ */
+ private boolean enabled = true;
+
public int getOrder() {
return this.order;
}
@@ -321,6 +328,14 @@ public class SentinelProperties {
public void setUrlPatterns(List urlPatterns) {
this.urlPatterns = urlPatterns;
}
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
}
public static class Log {
diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java
index 1eea41e9b..5a73f2cbe 100644
--- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java
+++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/SentinelWebAutoConfiguration.java
@@ -16,7 +16,10 @@
package org.springframework.cloud.alibaba.sentinel;
-import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.servlet.Filter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -28,9 +31,7 @@ import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
-import javax.servlet.Filter;
-import java.util.ArrayList;
-import java.util.List;
+import com.alibaba.csp.sentinel.adapter.servlet.CommonFilter;
/**
* @author xiaojing
@@ -48,7 +49,8 @@ public class SentinelWebAutoConfiguration {
private SentinelProperties properties;
@Bean
- public FilterRegistrationBean servletRequestListener() {
+ @ConditionalOnProperty(name = "spring.cloud.sentinel.filter.enabled", matchIfMissing = true)
+ public FilterRegistrationBean sentinelFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean<>();
SentinelProperties.Filter filterConfig = properties.getFilter();
diff --git a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java
index f42898bcd..9562fdc06 100644
--- a/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java
+++ b/spring-cloud-alibaba-sentinel/src/main/java/org/springframework/cloud/alibaba/sentinel/endpoint/SentinelEndpoint.java
@@ -16,6 +16,13 @@
package org.springframework.cloud.alibaba.sentinel.endpoint;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
+import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
+import org.springframework.cloud.alibaba.sentinel.SentinelProperties;
+
import com.alibaba.csp.sentinel.adapter.servlet.config.WebServletConfig;
import com.alibaba.csp.sentinel.config.SentinelConfig;
import com.alibaba.csp.sentinel.log.LogBase;
@@ -25,12 +32,7 @@ import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRuleManager;
import com.alibaba.csp.sentinel.slots.system.SystemRuleManager;
import com.alibaba.csp.sentinel.transport.config.TransportConfig;
-import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
-import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
-import org.springframework.cloud.alibaba.sentinel.SentinelProperties;
-
-import java.util.HashMap;
-import java.util.Map;
+import com.alibaba.csp.sentinel.util.AppNameUtil;
/**
* Endpoint for Sentinel, contains ans properties and rules
@@ -50,6 +52,7 @@ public class SentinelEndpoint {
final Map result = new HashMap<>();
if (sentinelProperties.isEnabled()) {
+ result.put("appName", AppNameUtil.getAppName());
result.put("logDir", LogBase.getLogBaseDir());
result.put("logUsePid", LogBase.isLogNameUsePid());
result.put("blockPage", WebServletConfig.getBlockPage());
diff --git a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
index b445fc6ab..80fec1a50 100644
--- a/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
+++ b/spring-cloud-alibaba-sentinel/src/main/resources/META-INF/additional-spring-configuration-metadata.json
@@ -39,6 +39,12 @@
"defaultValue": "Integer.MIN_VALUE",
"description": "sentinel filter chain order, will be set to FilterRegistrationBean."
},
+ {
+ "name": "spring.cloud.sentinel.filter.enabled",
+ "type": "java.lang.Boolean",
+ "defaultValue": true,
+ "description": "Enable to instance com.alibaba.csp.sentinel.adapter.servlet.CommonFilter."
+ },
{
"name": "spring.cloud.sentinel.metric.charset",
"type": "java.lang.String",
diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java
index 3b83cfb62..91a0cccb9 100644
--- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java
+++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/SmsServiceImpl.java
@@ -17,15 +17,20 @@ package org.springframework.cloud.alicloud.sms;
import java.text.ParseException;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.cloud.alicloud.context.AliCloudProperties;
import org.springframework.cloud.alicloud.context.sms.SmsProperties;
import org.springframework.cloud.alicloud.sms.base.DefaultAlicomMessagePuller;
import org.springframework.cloud.alicloud.sms.endpoint.EndpointManager;
import org.springframework.cloud.alicloud.sms.endpoint.ReceiveMessageEntity;
-import com.aliyuncs.dysmsapi.model.v20170525.*;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;
+import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendBatchSmsResponse;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
+import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
@@ -34,7 +39,7 @@ import com.aliyuncs.exceptions.ServerException;
*/
public final class SmsServiceImpl extends AbstractSmsService {
- private static final Log log = LogFactory.getLog(SmsServiceImpl.class);
+ private static final Logger log = LoggerFactory.getLogger(SmsServiceImpl.class);
/**
* will expose user to call this method send sms message
* @param sendSmsRequest
diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java
index 50fe2ed6e..df03a0714 100755
--- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java
+++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/DefaultAlicomMessagePuller.java
@@ -15,14 +15,6 @@
*/
package org.springframework.cloud.alicloud.sms.base;
-import com.aliyun.mns.client.CloudQueue;
-import com.aliyun.mns.common.ClientException;
-import com.aliyun.mns.common.ServiceException;
-import com.aliyun.mns.model.Message;
-import org.apache.commons.lang3.concurrent.BasicThreadFactory;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
@@ -33,12 +25,22 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledThreadPoolExecutor;
+import org.apache.commons.lang3.concurrent.BasicThreadFactory;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.aliyun.mns.client.CloudQueue;
+import com.aliyun.mns.common.ClientException;
+import com.aliyun.mns.common.ServiceException;
+import com.aliyun.mns.model.Message;
+
/**
* 阿里通信官方消息默认拉取工具类
*/
public class DefaultAlicomMessagePuller {
- private Log logger = LogFactory.getLog(DefaultAlicomMessagePuller.class);
+ private static final Logger log = LoggerFactory
+ .getLogger(DefaultAlicomMessagePuller.class);
private String mnsAccountEndpoint = "https://1943695596114318.mns.cn-hangzhou.aliyuncs.com/";// 阿里通信消息的endpoint,固定。
private String endpointNameForPop = "cn-hangzhou";
@@ -103,7 +105,7 @@ public class DefaultAlicomMessagePuller {
sPollingMap.put(queueName, false);
lockObj.notifyAll();
if (debugLogOpen) {
- logger.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!");
+ log.info("PullMessageTask_WakeUp:Everyone WakeUp and Work!");
}
}
}
@@ -131,7 +133,7 @@ public class DefaultAlicomMessagePuller {
if (p != null && p) {
try {
if (debugLogOpen) {
- logger.info("PullMessageTask_sleep:"
+ log.info("PullMessageTask_sleep:"
+ Thread.currentThread().getName()
+ " Have a nice sleep!");
}
@@ -140,7 +142,7 @@ public class DefaultAlicomMessagePuller {
}
catch (InterruptedException e) {
if (debugLogOpen) {
- logger.info("PullMessageTask_Interrupted!"
+ log.info("PullMessageTask_Interrupted!"
+ Thread.currentThread().getName()
+ " QueueName is " + queueName);
}
@@ -158,7 +160,7 @@ public class DefaultAlicomMessagePuller {
if (debugLogOpen) {
SimpleDateFormat format = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
- logger.info("PullMessageTask_popMessage:"
+ log.info("PullMessageTask_popMessage:"
+ Thread.currentThread().getName() + "-popDone at "
+ "," + format.format(new Date()) + " msgSize="
+ (popMsg == null ? 0 : popMsg.getMessageId()));
@@ -171,7 +173,7 @@ public class DefaultAlicomMessagePuller {
else {
if (setPolling(queueName)) {
if (debugLogOpen) {
- logger.info("PullMessageTask_setPolling:"
+ log.info("PullMessageTask_setPolling:"
+ Thread.currentThread().getName() + " Polling!");
}
}
@@ -180,7 +182,7 @@ public class DefaultAlicomMessagePuller {
}
do {
if (debugLogOpen) {
- logger.info("PullMessageTask_Keep_Polling"
+ log.info("PullMessageTask_Keep_Polling"
+ Thread.currentThread().getName()
+ "KEEP Polling!");
}
@@ -189,7 +191,7 @@ public class DefaultAlicomMessagePuller {
}
catch (ClientException e) {
if (debugLogOpen) {
- logger.info(
+ log.info(
"PullMessageTask_Pop_Message:ClientException Refresh accessKey"
+ e);
}
@@ -200,7 +202,7 @@ public class DefaultAlicomMessagePuller {
}
catch (ServiceException e) {
if (debugLogOpen) {
- logger.info(
+ log.info(
"PullMessageTask_Pop_Message:ServiceException Refresh accessKey"
+ e);
}
@@ -211,7 +213,7 @@ public class DefaultAlicomMessagePuller {
}
catch (Exception e) {
if (debugLogOpen) {
- logger.info(
+ log.info(
"PullMessageTask_Pop_Message:Exception Happened when polling popMessage: "
+ e);
}
@@ -224,7 +226,7 @@ public class DefaultAlicomMessagePuller {
if (dealResult) {
// remember to delete message when consume message successfully.
if (debugLogOpen) {
- logger.info("PullMessageTask_Deal_Message:"
+ log.info("PullMessageTask_Deal_Message:"
+ Thread.currentThread().getName() + "deleteMessage "
+ popMsg.getMessageId());
}
@@ -232,19 +234,19 @@ public class DefaultAlicomMessagePuller {
}
}
catch (ClientException e) {
- logger.error("PullMessageTask_execute_error,messageType:"
- + messageType + ",queueName:" + queueName, e);
+ log.error("PullMessageTask_execute_error,messageType:" + messageType
+ + ",queueName:" + queueName, e);
break;
}
catch (ServiceException e) {
if (e.getErrorCode().equals("AccessDenied")) {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName
+ ",please check messageType and queueName", e);
}
else {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName, e);
}
break;
@@ -252,30 +254,30 @@ public class DefaultAlicomMessagePuller {
}
catch (com.aliyuncs.exceptions.ClientException e) {
if (e.getErrCode().equals("InvalidAccessKeyId.NotFound")) {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName
+ ",please check AccessKeyId", e);
}
if (e.getErrCode().equals("SignatureDoesNotMatch")) {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName
+ ",please check AccessKeySecret", e);
}
else {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName, e);
}
break;
}
catch (Exception e) {
- logger.error("PullMessageTask_execute_error,messageType:"
- + messageType + ",queueName:" + queueName, e);
+ log.error("PullMessageTask_execute_error,messageType:" + messageType
+ + ",queueName:" + queueName, e);
try {
Thread.sleep(sleepSecondWhenNoData);
}
catch (InterruptedException e1) {
- logger.error("PullMessageTask_execute_error,messageType:"
+ log.error("PullMessageTask_execute_error,messageType:"
+ messageType + ",queueName:" + queueName, e);
}
}
diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java
index 270f9a56b..e312ec36d 100755
--- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java
+++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/base/TokenGetterForAlicom.java
@@ -15,6 +15,15 @@
*/
package org.springframework.cloud.alicloud.sms.base;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.TimeZone;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudQueue;
import com.aliyun.mns.client.MNSClient;
@@ -27,21 +36,13 @@ import com.aliyuncs.http.MethodType;
import com.aliyuncs.http.ProtocolType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.TimeZone;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
/**
* 获取接收云通信消息的临时token
*
*/
public class TokenGetterForAlicom {
- private Log logger = LogFactory.getLog(TokenGetterForAlicom.class);
+ private static final Logger log = LoggerFactory.getLogger(TokenGetterForAlicom.class);
private String accessKeyId;
private String accessKeySecret;
private String endpointNameForPop;
@@ -100,7 +101,7 @@ public class TokenGetterForAlicom {
return token;
}
else {
- logger.error("getTokenFromRemote_error,messageType:" + messageType + ",code:"
+ log.error("getTokenFromRemote_error,messageType:" + messageType + ",code:"
+ response.getCode() + ",message:" + response.getMessage());
throw new ServerException(response.getCode(), response.getMessage());
}
@@ -124,8 +125,6 @@ public class TokenGetterForAlicom {
CloudAccount account = new CloudAccount(token.getTempAccessKeyId(),
token.getTempAccessKeySecret(), mnsAccountEndpoint,
token.getToken());
- // logger.warn("ak:"+token.getTempAccessKey());
- // logger.warn("token:"+token.getToken());
MNSClient client = account.getMNSClient();
CloudQueue queue = client.getQueueRef(queueName);
token.setClient(client);
diff --git a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java
index d254e0ebe..77d8e39b0 100644
--- a/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java
+++ b/spring-cloud-alicloud-sms/src/main/java/org/springframework/cloud/alicloud/sms/endpoint/SmsEndpoint.java
@@ -15,12 +15,12 @@
*/
package org.springframework.cloud.alicloud.sms.endpoint;
+import java.util.Map;
+
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
-import java.util.Map;
-
-@Endpoint(id = "sms-info")
+@Endpoint(id = "sms")
public class SmsEndpoint {
@ReadOperation