diff --git a/sdk-examples/java/spring-cloud-v2/.gitignore b/sdk-examples/java/spring-cloud-v2/.gitignore
new file mode 100644
index 00000000..3b8d969a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/.gitignore
@@ -0,0 +1,3 @@
+tmp/
+.vscode/
+
diff --git a/sdk-examples/java/spring-cloud-v2/README.md b/sdk-examples/java/spring-cloud-v2/README.md
new file mode 100644
index 00000000..c23e9e00
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/README.md
@@ -0,0 +1,24 @@
+
+# r-nacos spring-cloud-v2 说明
+
+本样例基于spring-boot:2.7.18和spring-cloud:2021.0.9,支持jdk1.8版本。
+
+
+
+## 使用方式
+
+1. 启动r-nacos
+2. 切换到spring-cloud-v2样例目录
+3. 本地打包 `mvn package` (如果有问题可以用 `mvn install` )
+4. 运行service: `java -jar demo-service/target/demo-service-1.0-SNAPSHOT.jar`
+5. 运行api: `java -jar demo-api/target/demo-api-1.0-SNAPSHOT.jar`
+6. 访问api: `curl "http://127.0.0.1:20895/hi?name=r-nacos"`
+
+```sh
+curl "http://127.0.0.1:20895/hi?name=r-nacos"
+
+[springcloud-demo-service]: Hello, r-nacos
+```
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/.gitignore b/sdk-examples/java/spring-cloud-v2/demo-api/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/pom.xml b/sdk-examples/java/spring-cloud-v2/demo-api/pom.xml
new file mode 100644
index 00000000..6f74c9b9
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/pom.xml
@@ -0,0 +1,83 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-api
+ demo-api
+ jar
+
+
+ UTF-8
+
+
+
+
+ com.rnacos.demo
+ demo-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/App.java b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/App.java
new file mode 100644
index 00000000..59bdd708
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/App.java
@@ -0,0 +1,16 @@
+package com.rnacos.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+/**
+ *
+ */
+@SpringBootApplication
+@EnableFeignClients // 启用 OpenFeign
+public class App {
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java
new file mode 100644
index 00000000..790e9625
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java
@@ -0,0 +1,17 @@
+package com.rnacos.demo.client;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+@FeignClient("springcloud-demo-service")
+public interface DemoServiceClient {
+
+ @RequestMapping(value = "/foo/sayHello", method = RequestMethod.POST)
+ Result sayHello(@RequestBody SayHelloRequest request);
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java
new file mode 100644
index 00000000..9161cab1
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java
@@ -0,0 +1,41 @@
+package com.rnacos.demo.foo.api;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Value;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.client.DemoServiceClient;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+import javax.annotation.Resource;
+
+@Component
+@RestController
+public class FooController {
+ @Value("${spring.application.name}")
+ private String serviceName;
+
+ @Resource
+ private DemoServiceClient demoServiceClient;
+
+ @GetMapping("/hi")
+ public String hello(@RequestParam("name") String name) {
+ if (name == null) {
+ name = "default";
+ }
+ SayHelloRequest request = new SayHelloRequest();
+ request.setName(name);
+ request.setFromAppName(serviceName);
+ Result sayHelloResult = demoServiceClient.sayHello(request);
+ if (!sayHelloResult.isSuccess()) {
+ return String.format("[ERROR]: %s", sayHelloResult.getMsg());
+ }
+ SayHelloResponse sayHelloResponse = sayHelloResult.getData();
+ return String.format("[%s]: %s", sayHelloResponse.getResponseFromAppName(),
+ sayHelloResponse.getResponseValue());
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-api/src/main/resources/application.yml b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/resources/application.yml
new file mode 100644
index 00000000..4d966cdf
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-api/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 20895
+spring:
+ application:
+ name: springcloud-demo-api
+ cloud:
+ nacos:
+ discovery:
+ username: nacos # nacos 登录用户名
+ password: nacos # 密码
+ server-addr: 127.0.0.1:8848 # nacos 服务端地址
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/.gitignore b/sdk-examples/java/spring-cloud-v2/demo-common/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/pom.xml b/sdk-examples/java/spring-cloud-v2/demo-common/pom.xml
new file mode 100644
index 00000000..b86cd42d
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/pom.xml
@@ -0,0 +1,30 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-common
+ demo-common
+ jar
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/Result.java b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/Result.java
new file mode 100644
index 00000000..3f26e50a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/Result.java
@@ -0,0 +1,54 @@
+package com.rnacos.demo;
+
+import java.io.Serializable;
+
+public class Result implements Serializable {
+ private boolean success;
+ private T data;
+ private String msg;
+
+ public Result() {
+
+ }
+
+ public Result(T data) {
+ this.success = true;
+ this.data = data;
+ }
+
+ public static Result of(T data) {
+ return new Result<>(data);
+ }
+
+ public static Result error(String msg) {
+ Result result = new Result<>();
+ result.success = false;
+ result.msg = msg;
+ return result;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java
new file mode 100644
index 00000000..aaac22c4
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java
@@ -0,0 +1,5 @@
+package com.rnacos.demo.foo;
+
+public interface DemoService {
+ String sayHello(String name);
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java
new file mode 100644
index 00000000..7a033330
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java
@@ -0,0 +1,24 @@
+package com.rnacos.demo.foo;
+
+import java.io.Serializable;
+
+public class SayHelloRequest implements Serializable {
+ private String fromAppName;
+ private String name;
+
+ public String getFromAppName() {
+ return fromAppName;
+ }
+
+ public void setFromAppName(String fromAppName) {
+ this.fromAppName = fromAppName;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java
new file mode 100644
index 00000000..b5098627
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java
@@ -0,0 +1,25 @@
+package com.rnacos.demo.foo;
+
+import java.io.Serializable;
+
+public class SayHelloResponse implements Serializable {
+ private String responseValue;
+ private String responseFromAppName;
+
+ public String getResponseValue() {
+ return responseValue;
+ }
+
+ public void setResponseValue(String responseValue) {
+ this.responseValue = responseValue;
+ }
+
+ public String getResponseFromAppName() {
+ return responseFromAppName;
+ }
+
+ public void setResponseFromAppName(String responseFromAppName) {
+ this.responseFromAppName = responseFromAppName;
+ }
+
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/package-info.java b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/package-info.java
new file mode 100644
index 00000000..567545c6
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-common/src/main/java/com/rnacos/demo/package-info.java
@@ -0,0 +1 @@
+package com.rnacos.demo;
diff --git a/sdk-examples/java/spring-cloud-v2/demo-service/.gitignore b/sdk-examples/java/spring-cloud-v2/demo-service/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-service/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-service/pom.xml b/sdk-examples/java/spring-cloud-v2/demo-service/pom.xml
new file mode 100644
index 00000000..6bbf6f4b
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-service/pom.xml
@@ -0,0 +1,75 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-service
+ demo-service
+ jar
+
+
+ UTF-8
+
+
+
+
+ com.rnacos.demo
+ demo-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ 1.8
+ 1.8
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/App.java b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/App.java
new file mode 100644
index 00000000..48ca3746
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/App.java
@@ -0,0 +1,16 @@
+package com.rnacos.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ *
+ */
+@SpringBootApplication
+@EnableDiscoveryClient
+public class App {
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java
new file mode 100644
index 00000000..04c7dd0e
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java
@@ -0,0 +1,26 @@
+package com.rnacos.demo.foo.service.impl;
+
+//import com.rnacos.demo.foo.DemoService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+@RestController
+public class DemoServiceImpl {
+ @Value("${spring.application.name}")
+ private String serviceName;
+
+ @RequestMapping(value = "/foo/sayHello", method = RequestMethod.POST)
+ public Result sayHello(@RequestBody SayHelloRequest request) {
+ SayHelloResponse response = new SayHelloResponse();
+ response.setResponseFromAppName(serviceName);
+ response.setResponseValue(String.format("Hello, %s", request.getName()));
+ return Result.of(response);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v2/demo-service/src/main/resources/application.yml b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/resources/application.yml
new file mode 100644
index 00000000..087f8532
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/demo-service/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 20894
+spring:
+ application:
+ name: springcloud-demo-service
+ cloud:
+ nacos:
+ discovery:
+ username: nacos # nacos 登录用户名
+ password: nacos # 密码
+ server-addr: 127.0.0.1:8848 # nacos 服务端地址
+
diff --git a/sdk-examples/java/spring-cloud-v2/pom.xml b/sdk-examples/java/spring-cloud-v2/pom.xml
new file mode 100644
index 00000000..74e3a707
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v2/pom.xml
@@ -0,0 +1,62 @@
+
+ 4.0.0
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ pom
+
+ springcloud-demo-parent
+ http://maven.apache.org
+
+
+ 1.8
+ 1.8
+ UTF-8
+
+ 2.7.18
+ 2021.0.9
+ 2021.1
+
+
+
+ demo-common
+ demo-service
+ demo-api
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
+
+
+ com.rnacos.demo
+ demo-common
+ 1.0-SNAPSHOT
+
+
+
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v3/.gitignore b/sdk-examples/java/spring-cloud-v3/.gitignore
new file mode 100644
index 00000000..3b8d969a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/.gitignore
@@ -0,0 +1,3 @@
+tmp/
+.vscode/
+
diff --git a/sdk-examples/java/spring-cloud-v3/README.md b/sdk-examples/java/spring-cloud-v3/README.md
new file mode 100644
index 00000000..b86bc968
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/README.md
@@ -0,0 +1,24 @@
+
+# r-nacos spring-cloud-v3 说明
+
+本样例基于spring-boot:3.2.8和spring-cloud:2023.0.3,支持jdk17版本。
+
+
+
+## 使用方式
+
+1. 启动r-nacos
+2. 切换到spring-cloud-v3样例目录
+3. 本地打包 `mvn package` (如果有问题可以用 `mvn install` )
+4. 运行service: `java -jar demo-service/target/demo-service-1.0-SNAPSHOT.jar`
+5. 运行api: `java -jar demo-api/target/demo-api-1.0-SNAPSHOT.jar`
+6. 访问api: `curl "http://127.0.0.1:20885/hi?name=r-nacos"`
+
+```sh
+curl "http://127.0.0.1:20885/hi?name=r-nacos"
+
+[springcloud-demo-service]: Hello, r-nacos
+```
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/.gitignore b/sdk-examples/java/spring-cloud-v3/demo-api/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/pom.xml b/sdk-examples/java/spring-cloud-v3/demo-api/pom.xml
new file mode 100644
index 00000000..87500a88
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/pom.xml
@@ -0,0 +1,84 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-api
+ demo-api
+ jar
+
+
+ UTF-8
+
+
+
+
+ com.rnacos.demo
+ demo-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+ org.springframework.cloud
+ spring-cloud-starter-loadbalancer
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+ javax.annotation
+ javax.annotation-api
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/App.java b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/App.java
new file mode 100644
index 00000000..59bdd708
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/App.java
@@ -0,0 +1,16 @@
+package com.rnacos.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+
+/**
+ *
+ */
+@SpringBootApplication
+@EnableFeignClients // 启用 OpenFeign
+public class App {
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java
new file mode 100644
index 00000000..790e9625
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/client/DemoServiceClient.java
@@ -0,0 +1,17 @@
+package com.rnacos.demo.client;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+@FeignClient("springcloud-demo-service")
+public interface DemoServiceClient {
+
+ @RequestMapping(value = "/foo/sayHello", method = RequestMethod.POST)
+ Result sayHello(@RequestBody SayHelloRequest request);
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java
new file mode 100644
index 00000000..9161cab1
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/java/com/rnacos/demo/foo/api/FooController.java
@@ -0,0 +1,41 @@
+package com.rnacos.demo.foo.api;
+
+import org.springframework.stereotype.Component;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Value;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.client.DemoServiceClient;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+import javax.annotation.Resource;
+
+@Component
+@RestController
+public class FooController {
+ @Value("${spring.application.name}")
+ private String serviceName;
+
+ @Resource
+ private DemoServiceClient demoServiceClient;
+
+ @GetMapping("/hi")
+ public String hello(@RequestParam("name") String name) {
+ if (name == null) {
+ name = "default";
+ }
+ SayHelloRequest request = new SayHelloRequest();
+ request.setName(name);
+ request.setFromAppName(serviceName);
+ Result sayHelloResult = demoServiceClient.sayHello(request);
+ if (!sayHelloResult.isSuccess()) {
+ return String.format("[ERROR]: %s", sayHelloResult.getMsg());
+ }
+ SayHelloResponse sayHelloResponse = sayHelloResult.getData();
+ return String.format("[%s]: %s", sayHelloResponse.getResponseFromAppName(),
+ sayHelloResponse.getResponseValue());
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-api/src/main/resources/application.yml b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/resources/application.yml
new file mode 100644
index 00000000..430b949c
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-api/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 20885
+spring:
+ application:
+ name: springcloud-demo-api
+ cloud:
+ nacos:
+ discovery:
+ username: nacos # nacos 登录用户名
+ password: nacos # 密码
+ server-addr: 127.0.0.1:8848 # nacos 服务端地址
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/.gitignore b/sdk-examples/java/spring-cloud-v3/demo-common/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/pom.xml b/sdk-examples/java/spring-cloud-v3/demo-common/pom.xml
new file mode 100644
index 00000000..b86cd42d
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/pom.xml
@@ -0,0 +1,30 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-common
+ demo-common
+ jar
+
+
+ UTF-8
+
+
+
+
+ junit
+ junit
+ 3.8.1
+ test
+
+
+
+
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/Result.java b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/Result.java
new file mode 100644
index 00000000..3f26e50a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/Result.java
@@ -0,0 +1,54 @@
+package com.rnacos.demo;
+
+import java.io.Serializable;
+
+public class Result implements Serializable {
+ private boolean success;
+ private T data;
+ private String msg;
+
+ public Result() {
+
+ }
+
+ public Result(T data) {
+ this.success = true;
+ this.data = data;
+ }
+
+ public static Result of(T data) {
+ return new Result<>(data);
+ }
+
+ public static Result error(String msg) {
+ Result result = new Result<>();
+ result.success = false;
+ result.msg = msg;
+ return result;
+ }
+
+ public boolean isSuccess() {
+ return success;
+ }
+
+ public void setSuccess(boolean success) {
+ this.success = success;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public T getData() {
+ return data;
+ }
+
+ public void setData(T data) {
+ this.data = data;
+ }
+
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java
new file mode 100644
index 00000000..aaac22c4
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/DemoService.java
@@ -0,0 +1,5 @@
+package com.rnacos.demo.foo;
+
+public interface DemoService {
+ String sayHello(String name);
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java
new file mode 100644
index 00000000..7a033330
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloRequest.java
@@ -0,0 +1,24 @@
+package com.rnacos.demo.foo;
+
+import java.io.Serializable;
+
+public class SayHelloRequest implements Serializable {
+ private String fromAppName;
+ private String name;
+
+ public String getFromAppName() {
+ return fromAppName;
+ }
+
+ public void setFromAppName(String fromAppName) {
+ this.fromAppName = fromAppName;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java
new file mode 100644
index 00000000..b5098627
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/foo/SayHelloResponse.java
@@ -0,0 +1,25 @@
+package com.rnacos.demo.foo;
+
+import java.io.Serializable;
+
+public class SayHelloResponse implements Serializable {
+ private String responseValue;
+ private String responseFromAppName;
+
+ public String getResponseValue() {
+ return responseValue;
+ }
+
+ public void setResponseValue(String responseValue) {
+ this.responseValue = responseValue;
+ }
+
+ public String getResponseFromAppName() {
+ return responseFromAppName;
+ }
+
+ public void setResponseFromAppName(String responseFromAppName) {
+ this.responseFromAppName = responseFromAppName;
+ }
+
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/package-info.java b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/package-info.java
new file mode 100644
index 00000000..567545c6
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-common/src/main/java/com/rnacos/demo/package-info.java
@@ -0,0 +1 @@
+package com.rnacos.demo;
diff --git a/sdk-examples/java/spring-cloud-v3/demo-service/.gitignore b/sdk-examples/java/spring-cloud-v3/demo-service/.gitignore
new file mode 100644
index 00000000..dc0d833a
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-service/.gitignore
@@ -0,0 +1,2 @@
+target/
+
diff --git a/sdk-examples/java/spring-cloud-v3/demo-service/pom.xml b/sdk-examples/java/spring-cloud-v3/demo-service/pom.xml
new file mode 100644
index 00000000..4812e4a6
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-service/pom.xml
@@ -0,0 +1,76 @@
+
+ 4.0.0
+
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ ../pom.xml
+
+
+ demo-service
+ demo-service
+ jar
+
+
+ UTF-8
+
+
+
+
+ com.rnacos.demo
+ demo-common
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+
+
+
+
+ javax.annotation
+ javax.annotation-api
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ UTF-8
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+
+
+ repackage
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/App.java b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/App.java
new file mode 100644
index 00000000..48ca3746
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/App.java
@@ -0,0 +1,16 @@
+package com.rnacos.demo;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+/**
+ *
+ */
+@SpringBootApplication
+@EnableDiscoveryClient
+public class App {
+ public static void main(String[] args) {
+ SpringApplication.run(App.class, args);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java
new file mode 100644
index 00000000..04c7dd0e
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/java/com/rnacos/demo/foo/service/impl/DemoServiceImpl.java
@@ -0,0 +1,26 @@
+package com.rnacos.demo.foo.service.impl;
+
+//import com.rnacos.demo.foo.DemoService;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.rnacos.demo.Result;
+import com.rnacos.demo.foo.SayHelloRequest;
+import com.rnacos.demo.foo.SayHelloResponse;
+
+@RestController
+public class DemoServiceImpl {
+ @Value("${spring.application.name}")
+ private String serviceName;
+
+ @RequestMapping(value = "/foo/sayHello", method = RequestMethod.POST)
+ public Result sayHello(@RequestBody SayHelloRequest request) {
+ SayHelloResponse response = new SayHelloResponse();
+ response.setResponseFromAppName(serviceName);
+ response.setResponseValue(String.format("Hello, %s", request.getName()));
+ return Result.of(response);
+ }
+}
diff --git a/sdk-examples/java/spring-cloud-v3/demo-service/src/main/resources/application.yml b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/resources/application.yml
new file mode 100644
index 00000000..6a828495
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/demo-service/src/main/resources/application.yml
@@ -0,0 +1,12 @@
+server:
+ port: 20884
+spring:
+ application:
+ name: springcloud-demo-service
+ cloud:
+ nacos:
+ discovery:
+ username: nacos # nacos 登录用户名
+ password: nacos # 密码
+ server-addr: 127.0.0.1:8848 # nacos 服务端地址
+
diff --git a/sdk-examples/java/spring-cloud-v3/pom.xml b/sdk-examples/java/spring-cloud-v3/pom.xml
new file mode 100644
index 00000000..54b5c530
--- /dev/null
+++ b/sdk-examples/java/spring-cloud-v3/pom.xml
@@ -0,0 +1,66 @@
+
+ 4.0.0
+
+ com.rnacos.demo
+ springcloud-demo-parent
+ 1.0-SNAPSHOT
+ pom
+
+ springcloud-demo-parent
+ http://maven.apache.org
+
+
+ 17
+ 17
+ UTF-8
+
+ 3.2.8
+ 2023.0.3
+ 2023.0.1.2
+
+
+
+ demo-common
+ demo-service
+ demo-api
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-dependencies
+ ${spring-boot.version}
+ pom
+ import
+
+
+ org.springframework.cloud
+ spring-cloud-dependencies
+ ${spring-cloud.version}
+ pom
+ import
+
+
+ com.alibaba.cloud
+ spring-cloud-alibaba-dependencies
+ ${spring-cloud-alibaba.version}
+ pom
+ import
+
+
+ com.rnacos.demo
+ demo-common
+ 1.0-SNAPSHOT
+
+
+ javax.annotation
+ javax.annotation-api
+ 1.3.2
+
+
+
+
+
+
\ No newline at end of file