dubboTranslatedAttributes) {
@@ -122,7 +126,12 @@ public class DubboGenericServiceFactory {
}
});
+ // ignore "registries" field and then use RegistryConfig beans
+ dataBinder.setDisallowedFields("registries");
+
dataBinder.bind(new MutablePropertyValues(dubboTranslatedAttributes));
+
+ registryConfigs.ifAvailable(referenceBean::setRegistries);
}
@PreDestroy
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java
index c0d78aca..131a0c1a 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataService.java
@@ -16,21 +16,61 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
+import org.apache.dubbo.common.URL;
+import org.apache.dubbo.config.annotation.Service;
+
import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
/**
- * Dubbo Metadata Service
+ * Dubbo Metadata Service is a core interface for service subscribers,
+ * it must keep the stable of structure in every evolution , makes sure all subscribers' compatibility.
+ *
+ * The interface contract's version must be {@link #VERSION} constant and group must be current Dubbo application name
*
* @author Mercy
*/
public interface DubboMetadataService {
/**
- * Get The json content of {@link ServiceRestMetadata} {@link Set}
+ * Current version of the interface contract
+ */
+ String VERSION = "1.0.0";
+
+ /**
+ * Get the json content of {@link ServiceRestMetadata} {@link Set}
*
* @return null
if present
*/
String getServiceRestMetadata();
+
+
+ /**
+ * Get all exported {@link URL#getServiceKey() service keys}
+ *
+ * @return non-null read-only {@link Set}
+ */
+ Set getAllServiceKeys();
+
+ /**
+ * Get all exported Dubbo's {@link URL URLs} {@link Map} whose key is the return value of
+ * {@link URL#getServiceKey()} method and value is the json content of List of {@link URL URLs}
+ *
+ * @return non-null read-only {@link Map}
+ */
+ Map getAllExportedURLs();
+
+ /**
+ * Get the json content of an exported List of {@link URL URLs} by the serviceInterface , group and version
+ *
+ * @param serviceInterface The class name of service interface
+ * @param group {@link Service#group() the service group} (optional)
+ * @param version {@link Service#version() the service version} (optional)
+ * @return non-null read-only {@link List}
+ * @see URL
+ */
+ String getExportedURLs(String serviceInterface, String group, String version);
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java
index b2b866c5..598b1ac3 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceExporter.java
@@ -16,16 +16,20 @@
*/
package org.springframework.cloud.alibaba.dubbo.service;
+import org.apache.dubbo.common.URL;
import org.apache.dubbo.config.ApplicationConfig;
import org.apache.dubbo.config.ProtocolConfig;
import org.apache.dubbo.config.ServiceConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.ObjectProvider;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
+import javax.annotation.PreDestroy;
+import java.util.List;
import java.util.function.Supplier;
/**
@@ -42,12 +46,12 @@ public class DubboMetadataServiceExporter {
private ApplicationConfig applicationConfig;
@Autowired
- private DubboMetadataService dubboMetadataService;
+ private ObjectProvider dubboMetadataService;
@Autowired
private Supplier protocolConfigSupplier;
- @Value("${spring.application.name:application}")
+ @Value("${spring.application.name:${dubbo.application.name:application}}")
private String currentApplicationName;
/**
@@ -57,33 +61,39 @@ public class DubboMetadataServiceExporter {
/**
* export {@link DubboMetadataService} as Dubbo service
+ *
+ * @return the exported {@link URL URLs}
*/
- public void export() {
+ public List export() {
- if (serviceConfig != null && serviceConfig.isExported()) {
- return;
+ if (serviceConfig == null || !serviceConfig.isExported()) {
+
+ serviceConfig = new ServiceConfig<>();
+
+ serviceConfig.setInterface(DubboMetadataService.class);
+ // Use DubboMetadataService.VERSION as the Dubbo Service version
+ serviceConfig.setVersion(DubboMetadataService.VERSION);
+ // Use current Spring application name as the Dubbo Service group
+ serviceConfig.setGroup(currentApplicationName);
+ serviceConfig.setRef(dubboMetadataService.getIfAvailable());
+ serviceConfig.setApplication(applicationConfig);
+ serviceConfig.setProtocol(protocolConfigSupplier.get());
+
+ serviceConfig.export();
+
+ if (logger.isInfoEnabled()) {
+ logger.info("The Dubbo service[{}] has been exported.", serviceConfig.toString());
+ }
}
- serviceConfig = new ServiceConfig<>();
-
- serviceConfig.setInterface(DubboMetadataService.class);
- // Use current Spring application name as the Dubbo Service version
- serviceConfig.setVersion(currentApplicationName);
- serviceConfig.setRef(dubboMetadataService);
- serviceConfig.setApplication(applicationConfig);
- serviceConfig.setProtocol(protocolConfigSupplier.get());
-
- serviceConfig.export();
-
- if (logger.isInfoEnabled()) {
- logger.info("The Dubbo service[{}] has been exported.", serviceConfig.toString());
- }
+ return serviceConfig.getExportedUrls();
}
/**
* unexport {@link DubboMetadataService}
*/
+ @PreDestroy
public void unexport() {
if (serviceConfig == null || serviceConfig.isUnexported()) {
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java
index e4a7b24c..db95179f 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceInvocationHandler.java
@@ -18,8 +18,12 @@ package org.springframework.cloud.alibaba.dubbo.service;
import org.apache.dubbo.rpc.service.GenericService;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
+import java.util.stream.Stream;
/**
* {@link DubboMetadataService} {@link InvocationHandler}
@@ -28,27 +32,29 @@ import java.lang.reflect.Method;
*/
class DubboMetadataServiceInvocationHandler implements InvocationHandler {
- /**
- * The method name of {@link DubboMetadataService#getServiceRestMetadata()}
- */
- private static final String METHOD_NAME = "getServiceRestMetadata";
-
- private static final String[] PARAMETER_TYPES = new String[0];
-
- private static final String[] PARAMETER_VALUES = new String[0];
+ private final Logger logger = LoggerFactory.getLogger(getClass());
private final GenericService genericService;
- public DubboMetadataServiceInvocationHandler(String serviceName, DubboGenericServiceFactory dubboGenericServiceFactory) {
- this.genericService = dubboGenericServiceFactory.create(serviceName, DubboMetadataService.class);
+ public DubboMetadataServiceInvocationHandler(String serviceName, String version, DubboGenericServiceFactory dubboGenericServiceFactory) {
+ this.genericService = dubboGenericServiceFactory.create(serviceName, DubboMetadataService.class, version);
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
- String methodName = method.getName();
- if (METHOD_NAME.equals(methodName)) {
- return genericService.$invoke(methodName, PARAMETER_TYPES, PARAMETER_VALUES);
+ Object returnValue = null;
+ try {
+ returnValue = genericService.$invoke(method.getName(), getParameterTypes(method), args);
+ } catch (Throwable e) {
+ if (logger.isErrorEnabled()) {
+ logger.error(e.getMessage(), e);
+ }
}
- return method.invoke(proxy, args);
+ return returnValue;
+ }
+
+ private String[] getParameterTypes(Method method) {
+ Class>[] parameterTypes = method.getParameterTypes();
+ return Stream.of(parameterTypes).map(Class::getName).toArray(length -> new String[length]);
}
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java
index 660834e3..614207c2 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/DubboMetadataServiceProxy.java
@@ -17,35 +17,68 @@
package org.springframework.cloud.alibaba.dubbo.service;
import org.springframework.beans.factory.BeanClassLoaderAware;
+import org.springframework.beans.factory.DisposableBean;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import static java.lang.reflect.Proxy.newProxyInstance;
/**
* The proxy of {@link DubboMetadataService}
*/
-public class DubboMetadataServiceProxy implements BeanClassLoaderAware {
+public class DubboMetadataServiceProxy implements BeanClassLoaderAware, DisposableBean {
private final DubboGenericServiceFactory dubboGenericServiceFactory;
private ClassLoader classLoader;
+ private final Map dubboMetadataServiceCache = new ConcurrentHashMap<>();
+
public DubboMetadataServiceProxy(DubboGenericServiceFactory dubboGenericServiceFactory) {
this.dubboGenericServiceFactory = dubboGenericServiceFactory;
}
/**
- * New proxy instance of {@link DubboMetadataService} via the specified service name
+ * Initializes {@link DubboMetadataService}'s Proxy
+ *
+ * @param serviceName the service name
+ * @param version the service version
+ * @return a {@link DubboMetadataService} proxy
+ */
+ public DubboMetadataService initProxy(String serviceName, String version) {
+ return dubboMetadataServiceCache.computeIfAbsent(serviceName, name -> newProxy(name, version));
+ }
+
+ /**
+ * Get a proxy instance of {@link DubboMetadataService} via the specified service name
*
* @param serviceName the service name
* @return a {@link DubboMetadataService} proxy
*/
- public DubboMetadataService newProxy(String serviceName) {
- return (DubboMetadataService) newProxyInstance(classLoader, new Class[]{DubboMetadataService.class},
- new DubboMetadataServiceInvocationHandler(serviceName, dubboGenericServiceFactory));
+ public DubboMetadataService getProxy(String serviceName) {
+ return dubboMetadataServiceCache.get(serviceName);
}
@Override
public void setBeanClassLoader(ClassLoader classLoader) {
this.classLoader = classLoader;
}
+
+ @Override
+ public void destroy() throws Exception {
+ dubboMetadataServiceCache.clear();
+ }
+
+ /**
+ * New a proxy instance of {@link DubboMetadataService} via the specified service name
+ *
+ * @param serviceName the service name
+ * @param version the service version
+ * @return a {@link DubboMetadataService} proxy
+ */
+ protected DubboMetadataService newProxy(String serviceName, String version) {
+ return (DubboMetadataService) newProxyInstance(classLoader, new Class[]{DubboMetadataService.class},
+ new DubboMetadataServiceInvocationHandler(serviceName, version, dubboGenericServiceFactory));
+ }
}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.java
new file mode 100644
index 00000000..048f4e2e
--- /dev/null
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/IntrospectiveDubboMetadataService.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.service;
+
+import org.apache.dubbo.common.URL;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata;
+import org.springframework.cloud.alibaba.dubbo.metadata.repository.DubboServiceMetadataRepository;
+import org.springframework.cloud.alibaba.dubbo.util.JSONUtils;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import static java.util.Collections.unmodifiableMap;
+import static org.springframework.util.CollectionUtils.isEmpty;
+
+/**
+ * Introspective {@link DubboMetadataService} implementation
+ *
+ * @author Mercy
+ */
+public class IntrospectiveDubboMetadataService implements DubboMetadataService {
+
+ private final Logger logger = LoggerFactory.getLogger(getClass());
+
+ @Autowired
+ private ObjectProvider dubboServiceMetadataRepository;
+
+ @Autowired
+ private JSONUtils jsonUtils;
+
+ @Override
+ public String getServiceRestMetadata() {
+ Set serviceRestMetadata = getRepository().getServiceRestMetadata();
+ String serviceRestMetadataJsonConfig = null;
+ if (!isEmpty(serviceRestMetadata)) {
+ serviceRestMetadataJsonConfig = jsonUtils.toJSON(serviceRestMetadata);
+ }
+ return serviceRestMetadataJsonConfig;
+ }
+
+ @Override
+ public Set getAllServiceKeys() {
+ return getRepository().getAllServiceKeys();
+ }
+
+ @Override
+ public Map getAllExportedURLs() {
+ Map> allExportedUrls = getRepository().getAllExportedUrls();
+ if (isEmpty(allExportedUrls)) {
+ if (logger.isDebugEnabled()) {
+ logger.debug("There is no registered URL.");
+ }
+ return Collections.emptyMap();
+ }
+
+ Map result = new HashMap<>();
+
+ allExportedUrls.forEach((serviceKey, urls) -> {
+ result.put(serviceKey, jsonUtils.toJSON(urls));
+ });
+
+ return unmodifiableMap(result);
+ }
+
+ @Override
+ public String getExportedURLs(String serviceInterface, String group, String version) {
+ List urls = getRepository().getExportedURLs(serviceInterface, group, version);
+ return jsonUtils.toJSON(urls);
+ }
+
+ private DubboServiceMetadataRepository getRepository() {
+ return dubboServiceMetadataRepository.getIfAvailable();
+ }
+}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataService.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataService.java
deleted file mode 100644
index 6fef49c7..00000000
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/service/PublishingDubboMetadataService.java
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * 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.service;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.alibaba.dubbo.metadata.ServiceRestMetadata;
-import org.springframework.cloud.alibaba.dubbo.util.JSONUtils;
-import org.springframework.util.CollectionUtils;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-import static org.springframework.util.ObjectUtils.isEmpty;
-
-/**
- * Publishing {@link DubboMetadataService} implementation
- *
- * @author Mercy
- */
-public class PublishingDubboMetadataService implements DubboMetadataService {
-
- /**
- * A Map to store REST metadata temporary, its' key is the special service name for a Dubbo service,
- * the value is a JSON content of JAX-RS or Spring MVC REST metadata from the annotated methods.
- */
- private final Set serviceRestMetadata = new LinkedHashSet<>();
-
- @Autowired
- private JSONUtils jsonUtils;
-
- /**
- * Publish the {@link Set} of {@link ServiceRestMetadata}
- *
- * @param serviceRestMetadataSet the {@link Set} of {@link ServiceRestMetadata}
- */
- public void publishServiceRestMetadata(Set serviceRestMetadataSet) {
- for (ServiceRestMetadata serviceRestMetadata : serviceRestMetadataSet) {
- if (!CollectionUtils.isEmpty(serviceRestMetadata.getMeta())) {
- this.serviceRestMetadata.add(serviceRestMetadata);
- }
- }
- }
-
- @Override
- public String getServiceRestMetadata() {
- String serviceRestMetadataJsonConfig = null;
- if (!isEmpty(serviceRestMetadata)) {
- serviceRestMetadataJsonConfig = jsonUtils.toJSON(serviceRestMetadata);
- }
- return serviceRestMetadataJsonConfig;
- }
-}
diff --git a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java
index 1dd1f6da..2ed9a7b5 100644
--- a/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java
+++ b/spring-cloud-alibaba-dubbo/src/main/java/org/springframework/cloud/alibaba/dubbo/util/JSONUtils.java
@@ -16,6 +16,8 @@
*/
package org.springframework.cloud.alibaba.dubbo.util;
+import org.apache.dubbo.common.URL;
+
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
@@ -25,8 +27,10 @@ import org.springframework.util.StringUtils;
import javax.annotation.PostConstruct;
import java.io.IOException;
+import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.stream.Collectors;
/**
* JSON Utilities class
@@ -44,6 +48,10 @@ public class JSONUtils {
this.objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
}
+ public String toJSON(Collection urls) {
+ return toJSON(urls.stream().map(URL::toFullString).collect(Collectors.toSet()));
+ }
+
public String toJSON(Object object) {
String jsonContent = null;
try {
@@ -56,6 +64,11 @@ public class JSONUtils {
return jsonContent;
}
+ public List toURLs(String urlsJSON) {
+ List list = toList(urlsJSON);
+ return list.stream().map(URL::valueOf).collect(Collectors.toList());
+ }
+
public List toList(String json) {
List list = Collections.emptyList();
try {
diff --git a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml
index 2e26e38f..9d6fd215 100644
--- a/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml
+++ b/spring-cloud-alibaba-examples/acm-example/acm-local-example/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml
index 52116dec..196dfaba 100644
--- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml
+++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-feign-example/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml
index d9e4d62b..a979ca4b 100644
--- a/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml
+++ b/spring-cloud-alibaba-examples/ans-example/ans-consumer-ribbon-example/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml
index 8c3f15d9..2cc604f1 100644
--- a/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml
+++ b/spring-cloud-alibaba-examples/ans-example/ans-provider-example/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/registry.conf
deleted file mode 100644
index 8a79c9f2..00000000
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/registry.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-registry {
- # file 、nacos 、redis
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- redis {
- serverAddr = "localhost:6379"
- db = "0"
- }
- file {
- name = "file.conf"
- }
-}
-
-config {
- # file nacos apollo
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- apollo {
- app.id = "fescar-server"
- apollo.meta = "http://192.168.1.204:8801"
- }
- file {
- name = "file.conf"
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/registry.conf
deleted file mode 100644
index 8a79c9f2..00000000
--- a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/registry.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-registry {
- # file 、nacos 、redis
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- redis {
- serverAddr = "localhost:6379"
- db = "0"
- }
- file {
- name = "file.conf"
- }
-}
-
-config {
- # file nacos apollo
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- apollo {
- app.id = "fescar-server"
- apollo.meta = "http://192.168.1.204:8801"
- }
- file {
- name = "file.conf"
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/registry.conf
deleted file mode 100644
index 8a79c9f2..00000000
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/registry.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-registry {
- # file 、nacos 、redis
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- redis {
- serverAddr = "localhost:6379"
- db = "0"
- }
- file {
- name = "file.conf"
- }
-}
-
-config {
- # file nacos apollo
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- apollo {
- app.id = "fescar-server"
- apollo.meta = "http://192.168.1.204:8801"
- }
- file {
- name = "file.conf"
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/registry.conf
deleted file mode 100644
index 8a79c9f2..00000000
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/registry.conf
+++ /dev/null
@@ -1,35 +0,0 @@
-registry {
- # file 、nacos 、redis
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- redis {
- serverAddr = "localhost:6379"
- db = "0"
- }
- file {
- name = "file.conf"
- }
-}
-
-config {
- # file nacos apollo
- type = "file"
-
- nacos {
- serverAddr = "localhost"
- namespace = "public"
- cluster = "default"
- }
- apollo {
- app.id = "fescar-server"
- apollo.meta = "http://192.168.1.204:8801"
- }
- file {
- name = "file.conf"
- }
-}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml
index 3ea982a9..ca72deb5 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-config-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml
index b0d02875..d340f6ff 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
nacos-discovery-example
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml
index a9691b66..18304be8 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-provider-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
nacos-discovery-example
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml
index 813485c8..186a069f 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
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 2d4f87e5..18e54636 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
@@ -5,7 +5,7 @@
org.springframework.cloud
nacos-gateway-example
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml
index 9387bf4f..2a675eea 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/nacos-gateway-provider-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
nacos-gateway-example
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml
index 147e3fc7..1e7a1d6e 100644
--- a/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml
+++ b/spring-cloud-alibaba-examples/nacos-example/nacos-gateway-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/oss-example/pom.xml b/spring-cloud-alibaba-examples/oss-example/pom.xml
index 731e2a86..ef9c417c 100644
--- a/spring-cloud-alibaba-examples/oss-example/pom.xml
+++ b/spring-cloud-alibaba-examples/oss-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
diff --git a/spring-cloud-alibaba-examples/pom.xml b/spring-cloud-alibaba-examples/pom.xml
index c82e51d5..addee644 100644
--- a/spring-cloud-alibaba-examples/pom.xml
+++ b/spring-cloud-alibaba-examples/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
4.0.0
@@ -21,6 +21,9 @@
sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example
sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example
sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api
+ sentinel-example/sentinel-webflux-example
+ sentinel-example/sentinel-spring-cloud-gateway-example
+ sentinel-example/sentinel-zuul-example
nacos-example/nacos-discovery-example
nacos-example/nacos-config-example
nacos-example/nacos-gateway-example
@@ -28,10 +31,10 @@
ans-example/ans-consumer-feign-example
ans-example/ans-consumer-ribbon-example
ans-example/ans-provider-example
- fescar-example/business-service
- fescar-example/order-service
- fescar-example/storage-service
- fescar-example/account-service
+ seata-example/business-service
+ seata-example/order-service
+ seata-example/storage-service
+ seata-example/account-service
acm-example/acm-local-example
rocketmq-example/rocketmq-consume-example
rocketmq-example/rocketmq-produce-example
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml
index d18bbc4b..afcd0911 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java
index 25204919..e7a2385f 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQConsumerApplication.java
@@ -1,10 +1,15 @@
package org.springframework.cloud.alibaba.cloud.examples;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.alibaba.cloud.examples.RocketMQConsumerApplication.MySink;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.Input;
+import org.springframework.cloud.stream.binder.PollableMessageSource;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.ParameterizedTypeReference;
import org.springframework.messaging.SubscribableChannel;
/**
@@ -27,10 +32,36 @@ public class RocketMQConsumerApplication {
@Input("input4")
SubscribableChannel input4();
+
+ @Input("input5")
+ PollableMessageSource input5();
}
public static void main(String[] args) {
SpringApplication.run(RocketMQConsumerApplication.class, args);
}
+ @Bean
+ public ConsumerCustomRunner customRunner() {
+ return new ConsumerCustomRunner();
+ }
+
+ public static class ConsumerCustomRunner implements CommandLineRunner {
+
+ @Autowired
+ private MySink mySink;
+
+ @Override
+ public void run(String... args) throws InterruptedException {
+ while (true) {
+ mySink.input5().poll(m -> {
+ String payload = (String) m.getPayload();
+ System.out.println("pull msg: " + payload);
+ }, new ParameterizedTypeReference() {
+ });
+ Thread.sleep(2_000);
+ }
+ }
+ }
+
}
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties
index ec27539c..dd8bb6ef 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-consume-example/src/main/resources/application.properties
@@ -24,6 +24,10 @@ spring.cloud.stream.bindings.input4.content-type=text/plain
spring.cloud.stream.bindings.input4.group=transaction-group
spring.cloud.stream.bindings.input4.consumer.concurrency=5
+spring.cloud.stream.bindings.input5.destination=pull-topic
+spring.cloud.stream.bindings.input5.content-type=text/plain
+spring.cloud.stream.bindings.input5.group=pull-topic-group
+
spring.application.name=rocketmq-consume-example
server.port=28082
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml
index f8e8f0b4..9a9603c2 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java
index bd157be0..9a55a4a4 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RocketMQProduceApplication.java
@@ -9,6 +9,7 @@ import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.Output;
import org.springframework.context.annotation.Bean;
import org.springframework.messaging.MessageChannel;
+import org.springframework.messaging.support.MessageBuilder;
/**
* @author Jim
@@ -23,6 +24,9 @@ public class RocketMQProduceApplication {
@Output("output2")
MessageChannel output2();
+
+ @Output("output3")
+ MessageChannel output3();
}
public static void main(String[] args) {
@@ -31,7 +35,12 @@ public class RocketMQProduceApplication {
@Bean
public CustomRunner customRunner() {
- return new CustomRunner();
+ return new CustomRunner("output1");
+ }
+
+ @Bean
+ public CustomRunner customRunner2() {
+ return new CustomRunner("output3");
}
@Bean
@@ -40,24 +49,45 @@ public class RocketMQProduceApplication {
}
public static class CustomRunner implements CommandLineRunner {
+
+ private final String bindingName;
+
+ public CustomRunner(String bindingName) {
+ this.bindingName = bindingName;
+ }
+
@Autowired
private SenderService senderService;
+ @Autowired
+ private MySource mySource;
+
@Override
public void run(String... args) throws Exception {
- int count = 5;
- for (int index = 1; index <= count; index++) {
- String msgContent = "msg-" + index;
- if (index % 3 == 0) {
- senderService.send(msgContent);
- }
- else if (index % 3 == 1) {
- senderService.sendWithTags(msgContent, "tagStr");
- }
- else {
- senderService.sendObject(new Foo(index, "foo"), "tagObj");
+ if (this.bindingName.equals("output1")) {
+ int count = 5;
+ for (int index = 1; index <= count; index++) {
+ String msgContent = "msg-" + index;
+ if (index % 3 == 0) {
+ senderService.send(msgContent);
+ }
+ else if (index % 3 == 1) {
+ senderService.sendWithTags(msgContent, "tagStr");
+ }
+ else {
+ senderService.sendObject(new Foo(index, "foo"), "tagObj");
+ }
}
}
+ else if (this.bindingName.equals("output3")) {
+ int count = 50;
+ for (int index = 1; index <= count; index++) {
+ String msgContent = "pullMsg-" + index;
+ mySource.output3()
+ .send(MessageBuilder.withPayload(msgContent).build());
+ }
+ }
+
}
}
diff --git a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties
index beca964a..a77b3084 100644
--- a/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties
+++ b/spring-cloud-alibaba-examples/rocketmq-example/rocketmq-produce-example/src/main/resources/application.properties
@@ -12,6 +12,10 @@ spring.cloud.stream.bindings.output2.content-type=application/json
spring.cloud.stream.rocketmq.bindings.output2.producer.transactional=true
spring.cloud.stream.rocketmq.bindings.output2.producer.group=myTxProducerGroup
+spring.cloud.stream.bindings.output3.destination=pull-topic
+spring.cloud.stream.bindings.output3.content-type=text/plain
+spring.cloud.stream.rocketmq.bindings.output3.producer.group=pull-binder-group
+
spring.application.name=rocketmq-produce-example
server.port=28081
diff --git a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml
index c5f553e7..12bf1277 100644
--- a/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml
+++ b/spring-cloud-alibaba-examples/schedulerx-example/schedulerx-simple-task-example/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml
similarity index 91%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/pom.xml
rename to spring-cloud-alibaba-examples/seata-example/account-service/pom.xml
index 5ffd2699..10b621c9 100644
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/pom.xml
+++ b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
@@ -14,7 +14,7 @@
org.springframework.cloud
- spring-cloud-starter-alibaba-fescar
+ spring-cloud-starter-alibaba-seata
org.springframework.boot
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java
rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountApplication.java
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java
similarity index 97%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java
rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java
index 3738fb87..7023438a 100644
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java
+++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/AccountController.java
@@ -17,7 +17,7 @@ package org.springframework.cloud.alibaba.cloud.examples;
import java.util.Random;
-import com.alibaba.fescar.core.context.RootContext;
+import io.seata.core.context.RootContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
similarity index 97%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
index f3ccf818..f1a6a50c 100644
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
+++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
@@ -16,17 +16,16 @@
package org.springframework.cloud.alibaba.cloud.examples;
import java.sql.SQLException;
-import java.util.Random;
+import com.alibaba.druid.pool.DruidDataSource;
+
+import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
-import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.fescar.rm.datasource.DataSourceProxy;
-
/**
* @author xiaojing
*/
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/application.properties
rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/file.conf b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/file.conf
similarity index 64%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/file.conf
rename to spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/file.conf
index 29c81842..b49739a1 100644
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/file.conf
+++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/file.conf
@@ -20,17 +20,26 @@ transport {
worker-thread-size = 8
}
}
+store {
+ # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
+ max-branch-session-size = 16384
+ # globe session size , if exceeded throws exceptions
+ max-global-session-size = 512
+ # file buffer size , if exceeded allocate new buffer
+ file-write-buffer-cache-size = 16384
+ # when recover batch read size
+ session.reload.read_size = 100
+}
service {
#vgroup->rgroup
- vgroup_mapping.storage-service-fescar-service-group = "localRgroup"
+ vgroup_mapping.account-service-fescar-service-group = "default"
#only support single node
- localRgroup.grouplist = "127.0.0.1:8091"
+ default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
}
-
client {
async.commit.buffer.limit = 10000
lock {
diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/registry.conf
new file mode 100644
index 00000000..31bcace5
--- /dev/null
+++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/registry.conf
@@ -0,0 +1,55 @@
+registry {
+ # file 、nacos 、eureka、redis、zk、consul
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ eureka {
+ serviceUrl = "http://localhost:1001/eureka"
+ application = "default"
+ weight = "1"
+ }
+ redis {
+ serverAddr = "localhost:6379"
+ db = "0"
+ }
+ zk {
+ cluster = "default"
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ consul {
+ cluster = "default"
+ serverAddr = "127.0.0.1:8500"
+ }
+ file {
+ name = "file.conf"
+ }
+}
+
+config {
+ # file、nacos 、apollo、zk
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ apollo {
+ app.id = "fescar-server"
+ apollo.meta = "http://192.168.1.204:8801"
+ }
+ zk {
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ file {
+ name = "file.conf"
+ }
+}
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml
similarity index 92%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/pom.xml
rename to spring-cloud-alibaba-examples/seata-example/business-service/pom.xml
index 1758d6ec..683ace06 100644
--- a/spring-cloud-alibaba-examples/fescar-example/business-service/pom.xml
+++ b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
@@ -14,7 +14,7 @@
org.springframework.cloud
- spring-cloud-starter-alibaba-fescar
+ spring-cloud-starter-alibaba-seata
org.springframework.cloud
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java
rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/BusinessApplication.java
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java
similarity index 98%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java
rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java
index 039074ec..0226f964 100644
--- a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java
+++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/HomeController.java
@@ -16,7 +16,7 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import com.alibaba.fescar.spring.annotation.GlobalTransactional;
+import io.seata.spring.annotation.GlobalTransactional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/application.properties
rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties
diff --git a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/file.conf b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/file.conf
similarity index 53%
rename from spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/file.conf
rename to spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/file.conf
index 857b089e..cb1ab8bb 100644
--- a/spring-cloud-alibaba-examples/fescar-example/account-service/src/main/resources/file.conf
+++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/file.conf
@@ -20,17 +20,46 @@ transport {
worker-thread-size = 8
}
}
+## transaction log store
+store {
+ ## store mode: file、db
+ mode = "file"
+
+ ## file store
+ file {
+ dir = "sessionStore"
+
+ # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
+ max-branch-session-size = 16384
+ # globe session size , if exceeded throws exceptions
+ max-global-session-size = 512
+ # file buffer size , if exceeded allocate new buffer
+ file-write-buffer-cache-size = 16384
+ # when recover batch read size
+ session.reload.read_size = 100
+ # async, sync
+ flush-disk-mode = async
+ }
+
+ ## database store
+ db {
+ driver_class = ""
+ url = ""
+ user = ""
+ password = ""
+ }
+
+}
service {
#vgroup->rgroup
- vgroup_mapping.account-service-fescar-service-group = "localRgroup"
+ vgroup_mapping.business-service-fescar-service-group = "default"
#only support single node
- localRgroup.grouplist = "127.0.0.1:8091"
+ default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
}
-
client {
async.commit.buffer.limit = 10000
lock {
diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/registry.conf
new file mode 100644
index 00000000..7d71afaa
--- /dev/null
+++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/registry.conf
@@ -0,0 +1,68 @@
+registry {
+ # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ eureka {
+ serviceUrl = "http://localhost:1001/eureka"
+ application = "default"
+ weight = "1"
+ }
+ redis {
+ serverAddr = "localhost:6379"
+ db = "0"
+ }
+ zk {
+ cluster = "default"
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ consul {
+ cluster = "default"
+ serverAddr = "127.0.0.1:8500"
+ }
+ etcd3 {
+ cluster = "default"
+ serverAddr = "http://localhost:2379"
+ }
+ sofa {
+ serverAddr = "127.0.0.1:9603"
+ application = "default"
+ region = "DEFAULT_ZONE"
+ datacenter = "DefaultDataCenter"
+ cluster = "default"
+ group = "SEATA_GROUP"
+ addressWaitTime = "3000"
+ }
+ file {
+ name = "file.conf"
+ }
+}
+
+config {
+ # file、nacos 、apollo、zk
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ apollo {
+ app.id = "seata-server"
+ apollo.meta = "http://192.168.1.204:8801"
+ }
+ zk {
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ file {
+ name = "file.conf"
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml
similarity index 91%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/pom.xml
rename to spring-cloud-alibaba-examples/seata-example/order-service/pom.xml
index d9041e87..a42da637 100644
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/pom.xml
+++ b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
@@ -14,7 +14,7 @@
org.springframework.cloud
- spring-cloud-starter-alibaba-fescar
+ spring-cloud-starter-alibaba-seata
org.springframework.boot
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
similarity index 98%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
index 035eb7ee..5ec93801 100644
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
+++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
@@ -24,7 +24,7 @@ import org.springframework.core.env.Environment;
import org.springframework.jdbc.core.JdbcTemplate;
import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.fescar.rm.datasource.DataSourceProxy;
+import io.seata.rm.datasource.DataSourceProxy;
/**
* @author xiaojing
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OderApplication.java
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/Order.java
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/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
similarity index 98%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
index d215588d..db294ed1 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/seata-example/order-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/OrderController.java
@@ -16,7 +16,7 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import com.alibaba.fescar.core.context.RootContext;
+import io.seata.core.context.RootContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/application.properties
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties
diff --git a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/file.conf b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/file.conf
similarity index 53%
rename from spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/file.conf
rename to spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/file.conf
index b087a18c..7213edea 100644
--- a/spring-cloud-alibaba-examples/fescar-example/business-service/src/main/resources/file.conf
+++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/file.conf
@@ -20,17 +20,46 @@ transport {
worker-thread-size = 8
}
}
+## transaction log store
+store {
+ ## store mode: file、db
+ mode = "file"
+
+ ## file store
+ file {
+ dir = "sessionStore"
+
+ # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
+ max-branch-session-size = 16384
+ # globe session size , if exceeded throws exceptions
+ max-global-session-size = 512
+ # file buffer size , if exceeded allocate new buffer
+ file-write-buffer-cache-size = 16384
+ # when recover batch read size
+ session.reload.read_size = 100
+ # async, sync
+ flush-disk-mode = async
+ }
+
+ ## database store
+ db {
+ driver_class = ""
+ url = ""
+ user = ""
+ password = ""
+ }
+
+}
service {
#vgroup->rgroup
- vgroup_mapping.business-service-fescar-service-group = "localRgroup"
+ vgroup_mapping.order-service-fescar-service-group = "default"
#only support single node
- localRgroup.grouplist = "127.0.0.1:8091"
+ default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
}
-
client {
async.commit.buffer.limit = 10000
lock {
diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/registry.conf
new file mode 100644
index 00000000..7d71afaa
--- /dev/null
+++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/registry.conf
@@ -0,0 +1,68 @@
+registry {
+ # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ eureka {
+ serviceUrl = "http://localhost:1001/eureka"
+ application = "default"
+ weight = "1"
+ }
+ redis {
+ serverAddr = "localhost:6379"
+ db = "0"
+ }
+ zk {
+ cluster = "default"
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ consul {
+ cluster = "default"
+ serverAddr = "127.0.0.1:8500"
+ }
+ etcd3 {
+ cluster = "default"
+ serverAddr = "http://localhost:2379"
+ }
+ sofa {
+ serverAddr = "127.0.0.1:9603"
+ application = "default"
+ region = "DEFAULT_ZONE"
+ datacenter = "DefaultDataCenter"
+ cluster = "default"
+ group = "SEATA_GROUP"
+ addressWaitTime = "3000"
+ }
+ file {
+ name = "file.conf"
+ }
+}
+
+config {
+ # file、nacos 、apollo、zk
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ apollo {
+ app.id = "seata-server"
+ apollo.meta = "http://192.168.1.204:8801"
+ }
+ zk {
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ file {
+ name = "file.conf"
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/fescar-example/readme-zh.md b/spring-cloud-alibaba-examples/seata-example/readme-zh.md
similarity index 72%
rename from spring-cloud-alibaba-examples/fescar-example/readme-zh.md
rename to spring-cloud-alibaba-examples/seata-example/readme-zh.md
index d10ecbf2..9c12eb50 100644
--- a/spring-cloud-alibaba-examples/fescar-example/readme-zh.md
+++ b/spring-cloud-alibaba-examples/seata-example/readme-zh.md
@@ -1,11 +1,11 @@
-# Fescar Example
+# Seata Example
## 项目说明
-本项目演示如何使用 Fescar Starter 完成 Spring Cloud 应用的分布式事务接入。
+本项目演示如何使用 Seata Starter 完成 Spring Cloud 应用的分布式事务接入。
-[Fescar](https://github.com/alibaba/fescar) 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。
+[Seata](https://github.com/seata/seata) 是 阿里巴巴 开源的 分布式事务中间件,以 高效 并且对业务 0 侵入 的方式,解决 微服务 场景下面临的分布式事务问题。
@@ -19,14 +19,14 @@
1. 创建 示例中 业务所需要的数据库表
-1. 启动 Fescar Server
+1. 启动 Seata Server
### 配置数据库
首先,你需要有一个支持 InnoDB 引擎的 MySQL 数据库。
-**注意**: 实际上,Fescar 支持不同的应用使用完全不相干的数据库,但是这里为了简单地演示一个原理,所以我们选择了只使用一个数据库。
+**注意**: 实际上,Seata 支持不同的应用使用完全不相干的数据库,但是这里为了简单地演示一个原理,所以我们选择了只使用一个数据库。
将 `account-server`、`order-service`、`storage-service` 这三个应用中的 resources 目录下的 `application.properties` 文件中的如下配置修改成你运行环境中的实际配置。
@@ -42,7 +42,7 @@ mysql.user.password=your mysql server password
### 创建 undo_log 表
-[Fescar AT 模式]() 需要使用到 undo_log 表。
+[Seata AT 模式]() 需要使用到 undo_log 表。
``` $sql
-- 注意此处0.3.0+ 增加唯一索引 ux_undo_log
@@ -93,24 +93,24 @@ CREATE TABLE `account_tbl` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
-### 启动 Fescar Server
+### 启动 Seata Server
-点击这个页面 [https://github.com/alibaba/fescar/releases](https://github.com/alibaba/fescar/releases),下载最新版本的 Fescar Server 端.
+点击这个页面 [https://github.com/seata/seata/releases](https://github.com/seata/seata/releases),下载最新版本的 Seata Server 端.
进入解压之后的 bin 目录,执行如下命令来启动
```$shell
-sh fescar-server.sh $LISTEN_PORT $PATH_FOR_PERSISTENT_DATA
+sh seata-server.sh $LISTEN_PORT $MODE(file or db)
```
-在这个示例中,采用如下命令来启动 Fescar Server
+在这个示例中,采用如下命令来启动 Seata Server
```$shell
-sh fescar-server.sh 8091 ~/fescar/data/
+sh seata-server.sh 8091 file
```
-**注意** 如果你修改了端口号,那么记得需要在各个示例工程中的 `application.conf` 文件中,修改 grouplist 的值。
+**注意** 如果你修改了endpoint且注册中心使用默认file类型,那么记得需要在各个示例工程中的 `file.conf` 文件中,修改 grouplist 的值(当registry.conf 中registry.type 或 config.type 为file 时会读取内部的file节点中的文件名,若type不为file将直接从配置类型的对应元数据的注册配置中心读取数据),推荐大家使用 nacos 作为配置注册中心。
## 运行示例
@@ -146,12 +146,12 @@ http://127.0.0.1:18081/fescar/rest
## 对 Spring Cloud 支持点
-- 通过 Spring MVC 提供服务的服务提供者,在收到 header 中含有 Fescar 信息的 HTTP 请求时,可以自动还原 Fescar 上下文。
+- 通过 Spring MVC 提供服务的服务提供者,在收到 header 中含有 Seata 信息的 HTTP 请求时,可以自动还原 Seata 上下文。
-- 支持服务调用者通过 RestTemplate 调用时,自动传递 Fescar 上下文。
+- 支持服务调用者通过 RestTemplate 调用时,自动传递 Seata 上下文。
-- 支持服务调用者通过 FeignClient 调用时,自动传递 Fescar 上下文。
+- 支持服务调用者通过 FeignClient 调用时,自动传递 Seata 上下文。
-- 支持 FeignClient 和 Hystrix 同时使用的场景。
+- 支持 SeataClient 和 Hystrix 同时使用的场景。
-- 支持 FeignClient 和 Sentinel 同时使用的场景。
+- 支持 SeataClient 和 Sentinel 同时使用的场景。
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml
similarity index 92%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/pom.xml
rename to spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml
index 15a8bdde..4e85a826 100644
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/pom.xml
+++ b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
@@ -14,7 +14,7 @@
org.springframework.cloud
- spring-cloud-starter-alibaba-fescar
+ spring-cloud-starter-alibaba-seata
org.springframework.boot
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
similarity index 98%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
index 8e4ccf7d..99b89f63 100644
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
+++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/DatabaseConfiguration.java
@@ -19,7 +19,7 @@ package org.springframework.cloud.alibaba.cloud.examples;
import java.sql.SQLException;
import com.alibaba.druid.pool.DruidDataSource;
-import com.alibaba.fescar.rm.datasource.DataSourceProxy;
+import io.seata.rm.datasource.DataSourceProxy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java
rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageApplication.java
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java
similarity index 97%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java
rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java
index fd97ab2c..31552104 100644
--- a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java
+++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/java/org/springframework/cloud/alibaba/cloud/examples/StorageController.java
@@ -16,7 +16,7 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import com.alibaba.fescar.core.context.RootContext;
+import io.seata.core.context.RootContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties
similarity index 100%
rename from spring-cloud-alibaba-examples/fescar-example/storage-service/src/main/resources/application.properties
rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties
diff --git a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/file.conf b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/file.conf
similarity index 53%
rename from spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/file.conf
rename to spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/file.conf
index 4f893da5..4699d684 100644
--- a/spring-cloud-alibaba-examples/fescar-example/order-service/src/main/resources/file.conf
+++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/file.conf
@@ -20,17 +20,46 @@ transport {
worker-thread-size = 8
}
}
+## transaction log store
+store {
+ ## store mode: file、db
+ mode = "file"
+
+ ## file store
+ file {
+ dir = "sessionStore"
+
+ # branch session size , if exceeded first try compress lockkey, still exceeded throws exceptions
+ max-branch-session-size = 16384
+ # globe session size , if exceeded throws exceptions
+ max-global-session-size = 512
+ # file buffer size , if exceeded allocate new buffer
+ file-write-buffer-cache-size = 16384
+ # when recover batch read size
+ session.reload.read_size = 100
+ # async, sync
+ flush-disk-mode = async
+ }
+
+ ## database store
+ db {
+ driver_class = ""
+ url = ""
+ user = ""
+ password = ""
+ }
+
+}
service {
#vgroup->rgroup
- vgroup_mapping.order-service-fescar-service-group = "localRgroup"
+ vgroup_mapping.storage-service-fescar-service-group = "default"
#only support single node
- localRgroup.grouplist = "127.0.0.1:8091"
+ default.grouplist = "127.0.0.1:8091"
#degrade current not support
enableDegrade = false
#disable
disable = false
}
-
client {
async.commit.buffer.limit = 10000
lock {
diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/registry.conf b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/registry.conf
new file mode 100644
index 00000000..7d71afaa
--- /dev/null
+++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/registry.conf
@@ -0,0 +1,68 @@
+registry {
+ # file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ eureka {
+ serviceUrl = "http://localhost:1001/eureka"
+ application = "default"
+ weight = "1"
+ }
+ redis {
+ serverAddr = "localhost:6379"
+ db = "0"
+ }
+ zk {
+ cluster = "default"
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ consul {
+ cluster = "default"
+ serverAddr = "127.0.0.1:8500"
+ }
+ etcd3 {
+ cluster = "default"
+ serverAddr = "http://localhost:2379"
+ }
+ sofa {
+ serverAddr = "127.0.0.1:9603"
+ application = "default"
+ region = "DEFAULT_ZONE"
+ datacenter = "DefaultDataCenter"
+ cluster = "default"
+ group = "SEATA_GROUP"
+ addressWaitTime = "3000"
+ }
+ file {
+ name = "file.conf"
+ }
+}
+
+config {
+ # file、nacos 、apollo、zk
+ type = "file"
+
+ nacos {
+ serverAddr = "localhost"
+ namespace = "public"
+ cluster = "default"
+ }
+ apollo {
+ app.id = "seata-server"
+ apollo.meta = "http://192.168.1.204:8801"
+ }
+ zk {
+ serverAddr = "127.0.0.1:2181"
+ session.timeout = 6000
+ connect.timeout = 2000
+ }
+ file {
+ name = "file.conf"
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml
index 257e4df0..76afa6d9 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json
index 8aacfc33..63afc91a 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/resources/flowrule.json
@@ -1,6 +1,6 @@
[
{
- "resource": "resource",
+ "resource": "/hello",
"controlBehavior": 0,
"count": 1,
"grade": 1,
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml
index 37d609d3..6c7465f0 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-api/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../../pom.xml
4.0.0
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml
index 88a4c663..0ce67127 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../../pom.xml
4.0.0
@@ -28,12 +28,17 @@
- com.alibaba.boot
+ com.alibaba.csp
+ sentinel-apache-dubbo-adapter
+
+
+
+ org.apache.dubbo
dubbo-spring-boot-starter
- com.alibaba
+ org.apache.dubbo
dubbo
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java
index 0caae729..705ddbc5 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-consumer-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceConsumer.java
@@ -1,14 +1,13 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import com.alibaba.dubbo.config.annotation.Reference;
+import org.apache.dubbo.config.annotation.Reference;
/**
* @author fangjian
*/
public class FooServiceConsumer {
- @Reference(version = "${foo.service.version}", application = "${dubbo.application.id}",
- url = "dubbo://localhost:12345", timeout = 30000)
+ @Reference(version = "${foo.service.version}", application = "${dubbo.application.id}", url = "dubbo://localhost:12345", timeout = 30000)
private FooService fooService;
public String hello(String name) {
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml
index d9c20878..fbba495e 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/pom.xml
@@ -5,7 +5,7 @@
org.springframework.cloud
spring-cloud-alibaba-examples
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../../../pom.xml
4.0.0
@@ -21,18 +21,24 @@
org.springframework.cloud
spring-cloud-starter-alibaba-sentinel
+
org.springframework.cloud
sentinel-dubbo-api
- com.alibaba.boot
+ com.alibaba.csp
+ sentinel-apache-dubbo-adapter
+
+
+
+ org.apache.dubbo
dubbo-spring-boot-starter
- com.alibaba
+ org.apache.dubbo
dubbo
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java
index 11dd2263..857b31bc 100644
--- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-dubbo-example/sentinel-dubbo-provider-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/FooServiceImpl.java
@@ -1,20 +1,15 @@
package org.springframework.cloud.alibaba.cloud.examples;
-import com.alibaba.dubbo.config.annotation.Service;
+import org.apache.dubbo.config.annotation.Service;
/**
* @author fangjian
*/
-@Service(
- version = "${foo.service.version}",
- application = "${dubbo.application.id}",
- protocol = "${dubbo.protocol.id}",
- registry = "${dubbo.registry.id}"
-)
+@Service(version = "${foo.service.version}", application = "${dubbo.application.id}", protocol = "${dubbo.protocol.id}", registry = "${dubbo.registry.id}")
public class FooServiceImpl implements FooService {
- @Override
- public String hello(String name) {
- return "hello, " + name;
- }
+ @Override
+ public String hello(String name) {
+ return "hello, " + name;
+ }
}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml
new file mode 100644
index 00000000..e2979eb1
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/pom.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-examples
+ 0.9.1.BUILD-SNAPSHOT
+ ../../pom.xml
+
+ 4.0.0
+
+
+ sentinel-spring-cloud-gateway-example
+ jar
+ Example demonstrating how to use sentinel with spring cloud gateway
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-gateway
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-sentinel-gateway
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java
new file mode 100644
index 00000000..0c39e3f7
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MySCGConfiguration.java
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import com.alibaba.csp.sentinel.adapter.gateway.sc.callback.BlockRequestHandler;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.web.reactive.function.server.ServerResponse;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import static org.springframework.web.reactive.function.BodyInserters.fromObject;
+
+/**
+ * @author Jim
+ */
+@Configuration
+public class MySCGConfiguration {
+
+ @Bean
+ public BlockRequestHandler blockRequestHandler() {
+ return new BlockRequestHandler() {
+ @Override
+ public Mono handleRequest(ServerWebExchange exchange, Throwable t) {
+ return ServerResponse.status(444)
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .body(fromObject("SCS Sentinel block"));
+ }
+ };
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java
new file mode 100644
index 00000000..7767a871
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesWebFluxController.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import java.util.List;
+import java.util.Set;
+
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+import reactor.core.publisher.Mono;
+
+/**
+ * @author Jim
+ */
+@RestController
+public class RulesWebFluxController {
+
+ @GetMapping("/api")
+ public Mono> apiRules() {
+ return Mono.just(GatewayApiDefinitionManager.getApiDefinitions());
+ }
+
+ @GetMapping("/gateway")
+ public Mono> apiGateway() {
+ return Mono.just(GatewayRuleManager.getRules());
+ }
+
+ @GetMapping("/flow")
+ public Mono> apiFlow() {
+ return Mono.just(FlowRuleManager.getRules());
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java
new file mode 100644
index 00000000..786d8dcd
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelSpringCloudGatewayApplication.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author Jim
+ */
+@SpringBootApplication
+public class SentinelSpringCloudGatewayApplication {
+
+ public static void main(String[] args) {
+ //GatewayCallbackManager.setRequestOriginParser(s -> "123");
+ SpringApplication.run(SentinelSpringCloudGatewayApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/api.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/api.json
new file mode 100644
index 00000000..6de3c4fb
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/api.json
@@ -0,0 +1,32 @@
+[
+ {
+ "apiName": "some_customized_api",
+ "predicateItems": [
+ {
+ "pattern": "/product/baz"
+ },
+ {
+ "pattern": "/product/foo/**",
+ "matchStrategy": 1
+ },
+ {
+ "items": [
+ {
+ "pattern": "/spring-cloud/**"
+ },
+ {
+ "pattern": "/spring-cloud-alibaba/**"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "apiName": "another_customized_api",
+ "predicateItems": [
+ {
+ "pattern": "/ahas"
+ }
+ ]
+ }
+]
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/application.yaml
new file mode 100644
index 00000000..a614f5b7
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/application.yaml
@@ -0,0 +1,37 @@
+server:
+ port: 18085
+spring:
+ application:
+ name: sentinel-spring-cloud-gateway
+ cloud:
+ gateway:
+ enabled: true
+ discovery:
+ locator:
+ lower-case-service-id: true
+ routes:
+ # Add your routes here.
+ - id: aliyun_route
+ uri: https://www.aliyun.com/
+ predicates:
+ - Path=/product/**
+ - id: httpbin_route
+ uri: https://httpbin.org
+ predicates:
+ - Path=/httpbin/**
+ filters:
+ - RewritePath=/httpbin/(?.*), /$\{segment}
+
+ sentinel:
+ datasource.ds2.file:
+ file: "classpath: gateway.json"
+ ruleType: gw-flow
+ datasource.ds1.file:
+ file: "classpath: api.json"
+ ruleType: gw-api-group
+ transport:
+ dashboard: localhost:8080
+ filter:
+ enabled: true
+
+management.endpoints.web.exposure.include: "*"
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/gateway.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/gateway.json
new file mode 100644
index 00000000..b08f71fc
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-spring-cloud-gateway-example/src/main/resources/gateway.json
@@ -0,0 +1,22 @@
+[
+ {
+ "resource": "some_customized_api",
+ "count": 1
+ },
+ {
+ "resource": "httpbin_route",
+ "count": 0,
+ "paramItem": {
+ "parseStrategy": 2,
+ "fieldName": "Spring-Cloud-Alibaba"
+ }
+ },
+ {
+ "resource": "httpbin_route",
+ "count": 0,
+ "paramItem": {
+ "parseStrategy": 3,
+ "fieldName": "name"
+ }
+ }
+]
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml
new file mode 100644
index 00000000..c3b4f17c
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/pom.xml
@@ -0,0 +1,72 @@
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-examples
+ 0.9.1.BUILD-SNAPSHOT
+ ../../pom.xml
+
+ 4.0.0
+
+
+ sentinel-webflux-example
+ jar
+ Example demonstrating how to use sentinel with webflux
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java
new file mode 100644
index 00000000..9d95923a
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/MyConfiguration.java
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import static org.springframework.web.reactive.function.BodyInserters.fromObject;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.web.reactive.function.server.ServerResponse;
+import org.springframework.web.server.ServerWebExchange;
+
+import com.alibaba.csp.sentinel.adapter.spring.webflux.callback.BlockRequestHandler;
+
+import reactor.core.publisher.Mono;
+
+/**
+ * @author Jim
+ */
+@Configuration
+public class MyConfiguration {
+
+ @Bean
+ public BlockRequestHandler blockRequestHandler() {
+ return new BlockRequestHandler() {
+ @Override
+ public Mono handleRequest(ServerWebExchange exchange,
+ Throwable t) {
+ return ServerResponse.status(HttpStatus.TOO_MANY_REQUESTS)
+ .contentType(MediaType.APPLICATION_JSON_UTF8)
+ .body(fromObject("block"));
+ }
+ };
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java
new file mode 100644
index 00000000..87a42503
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxApplication.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+/**
+ * @author Jim
+ */
+@SpringBootApplication
+public class SentinelWebFluxApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SentinelWebFluxApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java
new file mode 100644
index 00000000..2c5f9f1d
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelWebFluxController.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.csp.sentinel.adapter.reactor.SentinelReactorTransformer;
+
+import reactor.core.publisher.Flux;
+import reactor.core.publisher.Mono;
+
+/**
+ * @author Jim
+ */
+@RestController
+public class SentinelWebFluxController {
+
+ @GetMapping("/mono")
+ public Mono mono() {
+ return Mono.just("simple string")
+ // transform the publisher here.
+ .transform(new SentinelReactorTransformer<>("mono"));
+ }
+
+ @GetMapping("/flux")
+ public Flux flux() {
+ return Flux.fromArray(new String[] { "a", "b", "c" })
+ // transform the publisher here.
+ .transform(new SentinelReactorTransformer<>("flux"));
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties
new file mode 100644
index 00000000..e9750c02
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/application.properties
@@ -0,0 +1,10 @@
+spring.application.name=sentinel-example
+server.port=18084
+management.endpoints.web.exposure.include=*
+spring.cloud.sentinel.transport.dashboard=localhost:8080
+spring.cloud.sentinel.eager=true
+
+
+spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json
+spring.cloud.sentinel.datasource.ds1.file.data-type=json
+spring.cloud.sentinel.datasource.ds1.file.rule-type=flow
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/flowrule.json
new file mode 100644
index 00000000..10e022b8
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/resources/flowrule.json
@@ -0,0 +1,18 @@
+[
+ {
+ "resource": "/mono",
+ "controlBehavior": 0,
+ "count": 0,
+ "grade": 1,
+ "limitApp": "default",
+ "strategy": 0
+ },
+ {
+ "resource": "/flux",
+ "controlBehavior": 0,
+ "count": 0,
+ "grade": 1,
+ "limitApp": "default",
+ "strategy": 0
+ }
+]
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml
new file mode 100644
index 00000000..0f0b0c09
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/pom.xml
@@ -0,0 +1,82 @@
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-examples
+ 0.9.1.BUILD-SNAPSHOT
+ ../../pom.xml
+
+ 4.0.0
+
+
+ sentinel-zuul-example
+ jar
+ Example demonstrating how to use sentinel with zuul
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-sentinel
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-zuul
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-sentinel-gateway
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 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/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java
new file mode 100644
index 00000000..01411ab7
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/RulesController.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import java.util.List;
+import java.util.Set;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition;
+import com.alibaba.csp.sentinel.adapter.gateway.common.api.GatewayApiDefinitionManager;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule;
+import com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayRuleManager;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRule;
+import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager;
+
+/**
+ * @author Jim
+ */
+@RestController
+public class RulesController {
+
+ @GetMapping("/api")
+ public Set apiRules() {
+ return GatewayApiDefinitionManager.getApiDefinitions();
+ }
+
+ @GetMapping("/gateway")
+ public Set apiGateway() {
+ return GatewayRuleManager.getRules();
+ }
+
+ @GetMapping("/flow")
+ public List apiFlow() {
+ return FlowRuleManager.getRules();
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java
new file mode 100644
index 00000000..7e99e220
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/SentinelZuulApplication.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
+
+/**
+ * @author Jim
+ */
+@SpringBootApplication
+@EnableZuulProxy
+public class SentinelZuulApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SentinelZuulApplication.class, args);
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java
new file mode 100644
index 00000000..796241a2
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/java/org/springframework/cloud/alibaba/cloud/examples/ZuulConfiguration.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2018 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.springframework.cloud.alibaba.cloud.examples;
+
+import javax.servlet.http.HttpServletRequest;
+
+import com.alibaba.csp.sentinel.adapter.gateway.zuul.callback.RequestOriginParser;
+import com.alibaba.csp.sentinel.adapter.gateway.zuul.fallback.BlockResponse;
+import com.alibaba.csp.sentinel.adapter.gateway.zuul.fallback.ZuulBlockFallbackProvider;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author Jim
+ */
+@Configuration
+public class ZuulConfiguration {
+
+ @Bean
+ public ZuulBlockFallbackProvider zuulBlockFallbackProvider1() {
+ return new ZuulBlockFallbackProvider() {
+ @Override
+ public String getRoute() {
+ return "*";
+ }
+
+ @Override
+ public BlockResponse fallbackResponse(String route, Throwable cause) {
+ if (route.equals("my-service3")) {
+ return new BlockResponse(433, "Sentinel Block3", route);
+ } else if (route.equals("my-service4")) {
+ return new BlockResponse(444, "my-service4", route);
+ } else {
+ return new BlockResponse(499, "Sentinel Block 499", route);
+ }
+ }
+ };
+ }
+
+ @Bean
+ public RequestOriginParser requestOriginParser() {
+ return new RequestOriginParser() {
+
+ @Override
+ public String parseOrigin(HttpServletRequest request) {
+ return "123";
+ }
+ };
+ }
+
+}
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/api.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/api.json
new file mode 100644
index 00000000..6de3c4fb
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/api.json
@@ -0,0 +1,32 @@
+[
+ {
+ "apiName": "some_customized_api",
+ "predicateItems": [
+ {
+ "pattern": "/product/baz"
+ },
+ {
+ "pattern": "/product/foo/**",
+ "matchStrategy": 1
+ },
+ {
+ "items": [
+ {
+ "pattern": "/spring-cloud/**"
+ },
+ {
+ "pattern": "/spring-cloud-alibaba/**"
+ }
+ ]
+ }
+ ]
+ },
+ {
+ "apiName": "another_customized_api",
+ "predicateItems": [
+ {
+ "pattern": "/ahas"
+ }
+ ]
+ }
+]
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/application.yaml
new file mode 100644
index 00000000..0e9d9abf
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/application.yaml
@@ -0,0 +1,40 @@
+server:
+ port: 18086
+spring:
+ application:
+ name: sentinel-zuul
+ cloud:
+ sentinel:
+ datasource.ds2.file:
+ file: "classpath: gateway.json"
+ ruleType: gw-flow
+ datasource.ds1.file:
+ file: "classpath: api.json"
+ ruleType: gw-api-group
+ transport:
+ dashboard: localhost:8080
+ filter:
+ enabled: false
+
+management.endpoints.web.exposure.include: "*"
+
+
+zuul.routes.my-service.path: "/product/foo/**"
+zuul.routes.my-service.service-id: "my-service"
+
+zuul.routes.my-service2.path: "/my-service2/**"
+zuul.routes.my-service2.service-id: "my-service2"
+
+zuul.routes.my-service3.path: "/my-service3/**"
+zuul.routes.my-service3.service-id: "my-service3"
+
+zuul.routes.my-service4.path: "/my-service4/**"
+zuul.routes.my-service4.service-id: "my-service4"
+
+
+spring.cloud.sentinel.zuul.order.pre: 2000
+spring.cloud.sentinel.zuul.order.post: 500
+spring.cloud.sentinel.zuul.order.error: -100
+
+
+spring.cloud.sentinel.zuul.enabled: true
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/gateway.json b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/gateway.json
new file mode 100644
index 00000000..b3effe88
--- /dev/null
+++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-zuul-example/src/main/resources/gateway.json
@@ -0,0 +1,26 @@
+[
+ {
+ "resource": "some_customized_api",
+ "count": 0
+ },
+ {
+ "resource": "my-service2",
+ "count": 0
+ },
+ {
+ "resource": "my-service3",
+ "count": 0,
+ "paramItem": {
+ "parseStrategy": 2,
+ "fieldName": "Spring-Cloud-Alibaba"
+ }
+ },
+ {
+ "resource": "my-service4",
+ "count": 0,
+ "paramItem": {
+ "parseStrategy": 3,
+ "fieldName": "name"
+ }
+ }
+]
diff --git a/spring-cloud-alibaba-examples/sms-example/pom.xml b/spring-cloud-alibaba-examples/sms-example/pom.xml
index ceee4d43..9d567214 100644
--- a/spring-cloud-alibaba-examples/sms-example/pom.xml
+++ b/spring-cloud-alibaba-examples/sms-example/pom.xml
@@ -10,7 +10,7 @@
spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md
new file mode 100644
index 00000000..8cd9fb05
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/README_CN.md
@@ -0,0 +1,348 @@
+# Dubbo Spring Cloud 示例工程
+
+
+## 快速开始
+
+### 定义 Dubbo 服务接口
+
+Dubbo 服务接口是服务提供方与消费方的远程通讯契约,通常由普通的 Java 接口(interface)来声明,如 `EchoService` 接口:
+
+```java
+public interface EchoService {
+
+ String echo(String message);
+}
+```
+
+为了确保契约的一致性,推荐的做法是将 Dubbo 服务接口打包在第二方或者第三方的 artifact(jar)中,如以上接口就存放在
+ artifact [spring-cloud-dubbo-sample-api](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/tree/master/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api) 之中。
+对于服务提供方而言,不仅通过依赖 artifact 的形式引入 Dubbo 服务接口,而且需要将其实现。对应的服务消费端,同样地需要依赖该 artifact,
+并以接口调用的方式执行远程方法。接下来进一步讨论怎样实现 Dubbo 服务提供方和消费方。
+
+
+### 实现 Dubbo 服务提供方
+
+
+
+#### 初始化 `spring-cloud-dubbo-server-sample` Maven 工程
+
+首先,创建 `artifactId` 名为 `spring-cloud-dubbo-server-sample` 的 Maven 工程,并在其 `pom.xml` 文件中增添
+Dubbo Spring Cloud 必要的依赖:
+
+```xml
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+```
+
+以上依赖 artifact 说明如下:
+
+- `spring-cloud-dubbo-sample-api` : 提供 `EchoService` 接口的 artifact
+- `spring-boot-actuator` : Spring Boot Production-Ready artifact,间接引入 `spring-boot` artifact
+- `spring-cloud-starter-dubbo` : Dubbo Spring Cloud Starter `artifact`,间接引入 `dubbo-spring-boot-starter` 等 artifact
+- `spring-cloud-starter-alibaba-nacos-discovery` : Nacos Spring Cloud 服务注册与发现 `artifact`
+
+
+值得注意的是,以上 artifact 未指定版本(version),因此,还需显示地声明 `` :
+
+```xml
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-dependencies
+ 0.9.0.RELEASE
+ pom
+ import
+
+
+
+```
+
+> 以上完整的 Maven 依赖配置,请参考 `spring-cloud-dubbo-server-sample` [`pom.xml`](spring-cloud-dubbo-server-sample/pom.xml) 文件
+
+完成以上步骤之后,下一步则是实现 Dubbo 服务
+
+
+#### 实现 Dubbo 服务
+
+`EchoService` 作为暴露的 Dubbo 服务接口,服务提供方 `spring-cloud-dubbo-server-sample` 需要将其实现:
+
+```java
+@org.apache.dubbo.config.annotation.Service
+class EchoServiceImpl implements EchoService {
+
+ @Override
+ public String echo(String message) {
+ return "[echo] Hello, " + message;
+ }
+}
+```
+
+其中,`@org.apache.dubbo.config.annotation.Service` 是 Dubbo 服务注解,仅声明该 Java 服务(本地)实现为 Dubbo 服务。
+因此,下一步需要将其配置 Dubbo 服务(远程)。
+
+
+
+#### 配置 Dubbo 服务提供方
+
+在暴露 Dubbo 服务方面,推荐开发人员外部化配置的方式,即指定 Java 服务实现类的扫描基准包。
+> Dubbo Spring Cloud 继承了 Dubbo Spring Boot 的外部化配置特性,也可以通过标注 `@DubboComponentScan` 来实现基准包扫描。
+
+同时,Dubbo 远程服务需要暴露网络端口,并设定通讯协议,完整的 YAML 配置如下所示:
+
+```yaml
+dubbo:
+ scan:
+ # dubbo 服务扫描基准包
+ base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
+ protocol:
+ # dubbo 协议
+ name: dubbo
+ # dubbo 协议端口( -1 表示自增端口,从 20880 开始)
+ port: -1
+ registry:
+ # 挂载到 Spring Cloud 注册中心
+ address: spring-cloud://localhost
+
+spring:
+ application:
+ # Dubbo 应用名称
+ name: spring-cloud-alibaba-dubbo-server
+ main:
+ # Spring Boot 2.1 需要设定
+ allow-bean-definition-overriding: true
+ cloud:
+ nacos:
+ # Nacos 服务发现与注册配置
+ discovery:
+ server-addr: 127.0.0.1:8848
+```
+
+以上 YAML 内容,上半部分为 Dubbo 的配置:
+
+- `dubbo.scan.base-packages` : 指定 Dubbo 服务实现类的扫描基准包
+- `dubbo.protocol` : Dubbo 服务暴露的协议配置,其中子属性 `name` 为协议名称,`port` 为协议端口( -1 表示自增端口,从 20880 开始)
+- `dubbo.registry` : Dubbo 服务注册中心配置,其中子属性 `address` 的值 "spring-cloud://localhost",说明挂载到 Spring Cloud 注册中心
+> 当前 Dubbo Spring Cloud 实现必须配置 `dubbo.registry.address = spring-cloud://localhost`,下一个版本将其配置变为可选
+(参考 [issue #592](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/592)),
+> 并且支持传统 Dubbo 协议的支持(参考 [issue #588](https://github.com/spring-cloud-incubator/spring-cloud-alibaba/issues/588))
+
+下半部分则是 Spring Cloud 相关配置:
+
+- `spring.application.name` : Spring 应用名称,用于 Spring Cloud 服务注册和发现。
+> 该值在 Dubbo Spring Cloud 加持下被视作 `dubbo.application.name`,因此,无需再显示地配置 `dubbo.application.name`
+- `spring.main.allow-bean-definition-overriding` : 在 Spring Boot 2.1 以及更高的版本增加该设定,
+因为 Spring Boot 默认调整了 Bean 定义覆盖行为。(推荐一个好的 Dubbo 讨论 [issue #3193](https://github.com/apache/incubator-dubbo/issues/3193#issuecomment-474340165))
+- `spring.cloud.nacos.discovery` : Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
+
+> 以上完整的 YAML 配置文件,请参考 `spring-cloud-dubbo-server-sample` [`bootstrap.yaml`](spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml) 文件
+
+
+完成以上步骤后,还需编写一个 Dubbo Spring Cloud 引导类。
+
+
+#### 引导 Dubbo Spring Cloud 服务提供方应用
+
+Dubbo Spring Cloud 引导类与普通 Spring Cloud 应用并无差别,如下所示:
+```java
+@EnableDiscoveryClient
+@EnableAutoConfiguration
+public class DubboSpringCloudServerBootstrap {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DubboSpringCloudServerBootstrap.class);
+ }
+}
+```
+
+在引导 `DubboSpringCloudServerBootstrap` 之前,请提前启动 Nacos 服务器。
+当 `DubboSpringCloudServerBootstrap` 启动后,将应用 `spring-cloud-dubbo-server-sample` 将出现在 Nacos 控制台界面。
+
+
+当 Dubbo 服务提供方启动后,下一步实现一个 Dubbo 服务消费方。
+
+
+
+### 实现 Dubbo 服务消费方
+
+由于 Java 服务就 `EchoService`、服务提供方应用 `spring-cloud-dubbo-server-sample` 以及 Nacos 服务器均已准备完毕。Dubbo 服务消费方
+只需初始化服务消费方 Maven 工程 `spring-cloud-dubbo-client-sample` 以及消费 Dubbo 服务。
+
+
+
+#### 初始化 `spring-cloud-dubbo-client-sample` Maven 工程
+
+与服务提供方 Maven 工程类,需添加相关 Maven 依赖:
+
+```xml
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-dependencies
+ 0.9.0.RELEASE
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+```
+
+与应用 `spring-cloud-dubbo-server-sample` 不同的是,当前应用依赖 `spring-boot-starter-web`,表明它属于 Web Servlet 应用。
+
+> 以上完整的 Maven 依赖配置,请参考 `spring-cloud-dubbo-client-sample` [`pom.xml`](spring-cloud-dubbo-client-sample/pom.xml) 文件
+
+
+#### 配置 Dubbo 服务消费方
+
+Dubbo 服务消费方配置与服务提供方类似,当前应用 `spring-cloud-dubbo-client-sample` 属于纯服务消费方,因此,所需的外部化配置更精简:
+
+```yaml
+dubbo:
+ registry:
+ # 挂载到 Spring Cloud 注册中心
+ address: spring-cloud://localhost
+ cloud:
+ subscribed-services: spring-cloud-alibaba-dubbo-server
+
+spring:
+ application:
+ # Dubbo 应用名称
+ name: spring-cloud-alibaba-dubbo-client
+ main:
+ # Spring Boot 2.1 需要设定
+ allow-bean-definition-overriding: true
+ cloud:
+ nacos:
+ # Nacos 服务发现与注册配置
+ discovery:
+ server-addr: 127.0.0.1:8848
+```
+
+对比应用 `spring-cloud-dubbo-server-sample`,除应用名称 `spring.application.name` 存在差异外,`spring-cloud-dubbo-client-sample`
+新增了属性 `dubbo.cloud.subscribed-services` 的设置。并且该值为服务提供方应用 "spring-cloud-dubbo-server-sample"。
+
+- `dubbo.cloud.subscribed-services` : 用于服务消费方订阅服务提供方的应用名称的列表,若需订阅多应用,使用 "," 分割。
+不推荐使用默认值为 "*",它将订阅所有应用。
+> 当应用使用属性 `dubbo.cloud.subscribed-services` 默认值时,日志中将会输出一行警告:
+> > Current application will subscribe all services(size:x) in registry, a lot of memory and CPU cycles may be used,
+> > thus it's strongly recommend you using the externalized property 'dubbo.cloud.subscribed-services' to specify the services
+
+由于当前应用属于 Web 应用,它会默认地使用 8080 作为 Web 服务端口,如果需要自定义,可通过属性 `server.port` 调整。
+
+> 以上完整的 YAML 配置文件,请参考 `spring-cloud-dubbo-client-sample` [`bootstrap.yaml`](spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml) 文件
+
+
+
+#### 引导 Dubbo Spring Cloud 服务消费方应用
+
+为了减少实现步骤,以下引导类将 Dubbo 服务消费以及引导功能合二为一:
+
+```java
+@EnableDiscoveryClient
+@EnableAutoConfiguration
+@RestController
+public class DubboSpringCloudClientBootstrap {
+
+ @Reference
+ private EchoService echoService;
+
+ @GetMapping("/echo")
+ public String echo(String message) {
+ return echoService.echo(message);
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(DubboSpringCloudClientBootstrap.class);
+ }
+}
+```
+
+不仅如此,`DubboSpringCloudClientBootstrap` 也作为 REST Endpoint,通过暴露 `/echo` Web 服务,消费 Dubbo `EchoService` 服务。因此,
+可通过 `curl` 命令执行 HTTP GET 方法:
+
+```
+$ curl http://127.0.0.1:8080/echo?message=%E5%B0%8F%E9%A9%AC%E5%93%A5%EF%BC%88mercyblitz%EF%BC%89
+```
+
+HTTP 响应为:
+
+```
+[echo] Hello, 小马哥(mercyblitz)
+```
+
+以上结果说明应用 `spring-cloud-dubbo-client-sample` 通过消费 Dubbo 服务,返回服务提供方 `spring-cloud-dubbo-server-sample`
+运算后的内容。
+
+以上操作就一套完整的 Dubbo 服务提供方和消费方的运用,更多的详情请直接参考模块:
+- [`spring-cloud-dubbo-server-sample` ](spring-cloud-dubbo-server-sample)
+- [`spring-cloud-dubbo-client-sample`](spring-cloud-dubbo-client-sample)
+
+
+
+
+## 模块说明
+
+- [spring-cloud-dubbo-sample-api](spring-cloud-dubbo-sample-api):API 模块,存放 Dubbo 服务接口和模型定义
+- [spring-cloud-dubbo-provider-web-sample](spring-cloud-dubbo-provider-web-sample):Dubbo Spring Cloud 服务提供方示例(Web 应用)
+- [spring-cloud-dubbo-provider-sample](spring-cloud-dubbo-provider-sample):Dubbo Spring Cloud 服务提供方示例(非 Web 应用)
+- [spring-cloud-dubbo-consumer-sample](spring-cloud-dubbo-consumer-sample):Dubbo Spring Cloud 服务消费方示例
+- [spring-cloud-dubbo-servlet-gateway](spring-cloud-dubbo-servlet-gateway)-sample:Dubbo Spring Cloud Servlet 网关简易实现示例
\ 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 e4d358d5..f5754169 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
@@ -3,20 +3,23 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- spring-cloud-alibaba-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
- ../pom.xml
+ spring-cloud-build
+ 2.1.3.RELEASE
+
4.0.0
org.springframework.cloud
spring-cloud-alibaba-dubbo-examples
+ 0.9.1.BUILD-SNAPSHOT
Spring Cloud Alibaba Dubbo Examples
pom
spring-cloud-dubbo-sample-api
+ spring-cloud-dubbo-server-sample
+ spring-cloud-dubbo-client-sample
spring-cloud-dubbo-provider-sample
spring-cloud-dubbo-consumer-sample
spring-cloud-dubbo-provider-web-sample
@@ -24,14 +27,16 @@
- 2.7.0
+ 2.7.1
+ 2.1.1.RELEASE
+ 2.1.1.RELEASE
+ 2.1.1.RELEASE
2.1.1.RELEASE
2.1.1.RELEASE
4.0.1
-
@@ -42,112 +47,41 @@
import
-
+
- org.apache.dubbo
- dubbo-dependencies-bom
- ${dubbo.version}
+ org.springframework.cloud
+ spring-cloud-alibaba-dependencies
+ ${project.version}
pom
import
+
+ org.springframework.cloud
+ spring-cloud-netflix
+ ${spring-cloud-netflix.version}
+ pom
+ import
+
+
+
+ org.springframework.cloud
+ spring-cloud-openfeign-dependencies
+ ${spring-cloud-openfeign.version}
+ pom
+ import
+
+
+
+ org.apache.dubbo
+ dubbo-bom
+ ${dubbo.version}
+ pom
+ import
+
-
-
-
-
- org.springframework.boot
- spring-boot-actuator-autoconfigure
-
-
-
- org.springframework.boot
- spring-boot-configuration-processor
-
-
-
- org.springframework.boot
- spring-boot
-
-
-
- org.springframework.boot
- spring-boot-autoconfigure
- true
-
-
-
-
- org.springframework.cloud
- spring-cloud-commons
-
-
-
- org.springframework.cloud
- spring-cloud-context
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-dubbo
- ${project.version}
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-alibaba-nacos-discovery
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-zookeeper-discovery
- ${spring-cloud-zookeeper.version}
-
-
- org.apache.zookeeper
- zookeeper
-
-
-
-
-
- org.apache.zookeeper
- zookeeper
- 3.4.12
- true
-
-
- org.slf4j
- slf4j-log4j12
-
-
-
-
-
- org.apache.curator
- curator-framework
- ${curator.version}
-
-
-
-
- org.springframework.cloud
- spring-cloud-starter-consul-discovery
- ${spring-cloud-consul.version}
-
-
-
@@ -159,6 +93,4 @@
-
-
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml
new file mode 100644
index 00000000..1247cc08
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ org.springframework.cloud
+ spring-cloud-build
+ 2.1.3.RELEASE
+
+
+ 4.0.0
+
+ spring-cloud-dubbo-client-sample
+ Spring Cloud Dubbo Client Sample
+ 0.9.1.BUILD-SNAPSHOT
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-dependencies
+ 0.9.0.RELEASE
+ pom
+ import
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java
new file mode 100644
index 00000000..18a8fff2
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudClientBootstrap.java
@@ -0,0 +1,47 @@
+/*
+ * 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.bootstrap;
+
+import org.apache.dubbo.config.annotation.Reference;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cloud.alibaba.dubbo.service.EchoService;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * Dubbo Spring Cloud Client Bootstrap
+ */
+@EnableDiscoveryClient
+@EnableAutoConfiguration
+@RestController
+public class DubboSpringCloudClientBootstrap {
+
+ @Reference
+ private EchoService echoService;
+
+ @GetMapping("/echo")
+ public String echo(String message) {
+ return echoService.echo(message);
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(DubboSpringCloudClientBootstrap.class);
+ }
+}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml
new file mode 100644
index 00000000..42e49bcb
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-client-sample/src/main/resources/bootstrap.yaml
@@ -0,0 +1,15 @@
+dubbo:
+ registry:
+ address: spring-cloud://localhost
+ cloud:
+ subscribed-services: spring-cloud-alibaba-dubbo-server
+
+spring:
+ application:
+ name: spring-cloud-alibaba-dubbo-client
+ main:
+ allow-bean-definition-overriding: true
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml
index fe0b1e8e..49cc5441 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-consumer-sample/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- spring-cloud-alibaba-dubbo-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ spring-cloud-alibaba-dubbo-examples
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
4.0.0
@@ -21,6 +21,11 @@
spring-boot-starter-web
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
org.springframework.cloud
@@ -40,6 +45,64 @@
${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zookeeper-discovery
+ ${spring-cloud-zookeeper.version}
+
+
+ org.apache.zookeeper
+ zookeeper
+
+
+
+
+
+ org.apache.zookeeper
+ zookeeper
+ 3.4.12
+ true
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ org.apache.curator
+ curator-framework
+ ${curator.version}
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-consul-discovery
+ ${spring-cloud-consul.version}
+
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 45484000..0fb73298 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
@@ -26,6 +26,7 @@ import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.alibaba.dubbo.annotation.DubboTransported;
import org.springframework.cloud.alibaba.dubbo.service.RestService;
import org.springframework.cloud.alibaba.dubbo.service.User;
+import org.springframework.cloud.alibaba.dubbo.service.UserService;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.openfeign.EnableFeignClients;
@@ -53,6 +54,9 @@ import static org.springframework.http.MediaType.APPLICATION_JSON_UTF8_VALUE;
@EnableFeignClients
public class DubboSpringCloudConsumerBootstrap {
+ @Reference
+ private UserService userService;
+
@Reference(version = "1.0.0", protocol = "dubbo")
private RestService restService;
@@ -119,7 +123,28 @@ public class DubboSpringCloudConsumerBootstrap {
}
@Bean
- public ApplicationRunner paramRunner() {
+ public ApplicationRunner userServiceRunner() {
+ return arguments -> {
+
+ User user = new User();
+ user.setId(1L);
+ user.setName("小马哥");
+ user.setAge(33);
+
+ // save User
+ System.out.printf("UserService.save(%s) : %s\n", user, userService.save(user));
+
+ // find all Users
+ System.out.printf("UserService.findAll() : %s\n", user, userService.findAll());
+
+ // remove User
+ System.out.printf("UserService.remove(%d) : %s\n", user.getId(), userService.remove(user.getId()));
+
+ };
+ }
+
+ @Bean
+ public ApplicationRunner callRunner() {
return arguments -> {
// To call /path-variables
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
index 58911dc7..3672b591 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- spring-cloud-alibaba-dubbo-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ spring-cloud-alibaba-dubbo-examples
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
4.0.0
@@ -14,7 +14,6 @@
spring-cloud-dubbo-provider-sample
Spring Cloud Dubbo Provider Sample
-
@@ -30,6 +29,12 @@
spring-web
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
org.springframework.cloud
@@ -37,6 +42,65 @@
${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zookeeper-discovery
+ ${spring-cloud-zookeeper.version}
+
+
+ org.apache.zookeeper
+ zookeeper
+
+
+
+
+
+ org.apache.zookeeper
+ zookeeper
+ 3.4.12
+ true
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ org.apache.curator
+ curator-framework
+ ${curator.version}
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-consul-discovery
+ ${spring-cloud-consul.version}
+
+
io.netty
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/InMemoryUserService.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/InMemoryUserService.java
new file mode 100644
index 00000000..cd1aa8b3
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java
@@ -0,0 +1,47 @@
+/*
+ * 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.service;
+
+import org.apache.dubbo.config.annotation.Service;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * In-Memory {@link UserService} implementation
+ */
+@Service(protocol = "dubbo")
+public class InMemoryUserService implements UserService {
+
+ private Map usersRepository = new HashMap<>();
+
+ @Override
+ public boolean save(User user) {
+ return usersRepository.put(user.getId(), user) == null;
+ }
+
+ @Override
+ public boolean remove(Long userId) {
+ return usersRepository.remove(userId) != null;
+ }
+
+ @Override
+ public Collection findAll() {
+ return usersRepository.values();
+ }
+}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml
index f8f65e79..c4615e73 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/pom.xml
@@ -3,9 +3,9 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
- spring-cloud-alibaba-dubbo-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ spring-cloud-alibaba-dubbo-examples
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
4.0.0
@@ -34,6 +34,66 @@
${project.version}
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-zookeeper-discovery
+ ${spring-cloud-zookeeper.version}
+
+
+ org.apache.zookeeper
+ zookeeper
+
+
+
+
+
+ org.apache.zookeeper
+ zookeeper
+ 3.4.12
+ true
+
+
+ org.slf4j
+ slf4j-log4j12
+
+
+
+
+
+ org.apache.curator
+ curator-framework
+ ${curator.version}
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-consul-discovery
+ ${spring-cloud-consul.version}
+
+
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java
new file mode 100644
index 00000000..cd1aa8b3
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/service/InMemoryUserService.java
@@ -0,0 +1,47 @@
+/*
+ * 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.service;
+
+import org.apache.dubbo.config.annotation.Service;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * In-Memory {@link UserService} implementation
+ */
+@Service(protocol = "dubbo")
+public class InMemoryUserService implements UserService {
+
+ private Map usersRepository = new HashMap<>();
+
+ @Override
+ public boolean save(User user) {
+ return usersRepository.put(user.getId(), user) == null;
+ }
+
+ @Override
+ public boolean remove(Long userId) {
+ return usersRepository.remove(userId) != null;
+ }
+
+ @Override
+ public Collection findAll() {
+ return usersRepository.values();
+ }
+}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
index 3fddfbdb..de4a8666 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-provider-web-sample/src/main/resources/application.yaml
@@ -5,11 +5,14 @@ dubbo:
dubbo:
name: dubbo
port: -1
- registry:
+ registries:
+ new:
+ address: spring-cloud://localhost
+# registry:
# The Spring Cloud Dubbo's registry extension
- address: spring-cloud://localhost
+# address: spring-cloud://localhost
# The traditional Dubbo's registry
-# address: zookeeper://127.0.0.1:2181
+# address: nacos://127.0.0.1:8848
feign:
hystrix:
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml
index 557764b1..146bb262 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-dubbo-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
4.0.0
@@ -13,4 +13,20 @@
spring-cloud-dubbo-sample-api
Spring Cloud Dubbo Sample API
+
+
+
+ org.slf4j
+ slf4j-api
+ 1.7.25
+
+
+
+
+ org.apache.dubbo
+ dubbo
+ ${dubbo.version}
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java
new file mode 100644
index 00000000..ef2fa287
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/EchoService.java
@@ -0,0 +1,25 @@
+/*
+ * 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.service;
+
+/**
+ * Echo Service
+ */
+public interface EchoService {
+
+ String echo(String message);
+}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java
new file mode 100644
index 00000000..471f07bf
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-sample-api/src/main/java/org/springframework/cloud/alibaba/dubbo/service/UserService.java
@@ -0,0 +1,33 @@
+/*
+ * 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.service;
+
+import java.util.Collection;
+
+/**
+ * {@link User} Service
+ *
+ * @author Mercy
+ */
+public interface UserService {
+
+ boolean save(User user);
+
+ boolean remove(Long userId);
+
+ Collection findAll();
+}
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml
new file mode 100644
index 00000000..5ab588fd
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/pom.xml
@@ -0,0 +1,67 @@
+
+
+
+ org.springframework.cloud
+ spring-cloud-build
+ 2.1.3.RELEASE
+
+
+
+ 4.0.0
+
+ spring-cloud-dubbo-server-sample
+ Spring Cloud Dubbo Server Sample
+ 0.9.1.BUILD-SNAPSHOT
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-alibaba-dependencies
+ 0.9.0.RELEASE
+ pom
+ import
+
+
+
+
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-dubbo-sample-api
+ ${project.version}
+
+
+
+
+ org.springframework.boot
+ spring-boot-actuator
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-dubbo
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java
new file mode 100644
index 00000000..5d943730
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/java/org/springframework/cloud/alibaba/dubbo/bootstrap/DubboSpringCloudServerBootstrap.java
@@ -0,0 +1,45 @@
+/*
+ * 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.bootstrap;
+
+import org.apache.dubbo.config.annotation.Service;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.cloud.alibaba.dubbo.service.EchoService;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ * Dubbo Spring Cloud Server Bootstrap
+ */
+@EnableDiscoveryClient
+@EnableAutoConfiguration
+public class DubboSpringCloudServerBootstrap {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DubboSpringCloudServerBootstrap.class);
+ }
+}
+
+@Service
+class EchoServiceImpl implements EchoService {
+
+ @Override
+ public String echo(String message) {
+ return "[echo] Hello, " + message;
+ }
+}
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml
new file mode 100644
index 00000000..cee5b8fe
--- /dev/null
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-server-sample/src/main/resources/bootstrap.yaml
@@ -0,0 +1,18 @@
+dubbo:
+ scan:
+ base-packages: org.springframework.cloud.alibaba.dubbo.bootstrap
+ protocol:
+ name: dubbo
+ port: -1
+ registry:
+ address: spring-cloud://localhost
+
+spring:
+ application:
+ name: spring-cloud-alibaba-dubbo-server
+ main:
+ allow-bean-definition-overriding: true
+ cloud:
+ nacos:
+ discovery:
+ server-addr: 127.0.0.1:8848
\ No newline at end of file
diff --git a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml
index e9424abb..ac58a814 100644
--- a/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml
+++ b/spring-cloud-alibaba-examples/spring-cloud-alibaba-dubbo-examples/spring-cloud-dubbo-servlet-gateway-sample/pom.xml
@@ -5,7 +5,7 @@
spring-cloud-alibaba-dubbo-examples
org.springframework.cloud
- 2.1.0.BUILD-SNAPSHOT
+ 0.9.1.BUILD-SNAPSHOT
../pom.xml
4.0.0
@@ -28,10 +28,16 @@
${project.version}