From abc4a044ef8aca21bfeb208fbc4d69e2c86f36ae Mon Sep 17 00:00:00 2001
From: YunaiV <>
Date: Mon, 10 Feb 2020 00:04:57 +0800
Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20spring=20cloud=20openfeign?=
=?UTF-8?q?=20=E5=85=A5=E9=97=A8=E7=A4=BA=E4=BE=8B?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 4 +-
.../labx-03-sc-feign-demo01-consumer/pom.xml | 70 +++++++++++++++++++
.../consumer/DemoConsumerApplication.java | 41 +++++++++++
.../feign/DemoProviderFeignClient.java | 13 ++++
.../src/main/resources/application.yaml | 11 +++
.../labx-03-sc-feign-demo01-provider/pom.xml | 64 +++++++++++++++++
.../provider/DemoProviderApplication.java | 39 +++++++++++
.../src/main/resources/application.yaml | 12 ++++
labx-03/pom.xml | 19 +++++
pom.xml | 1 +
10 files changed, 272 insertions(+), 2 deletions(-)
create mode 100644 labx-03/labx-03-sc-feign-demo01-consumer/pom.xml
create mode 100644 labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/DemoConsumerApplication.java
create mode 100644 labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/feign/DemoProviderFeignClient.java
create mode 100644 labx-03/labx-03-sc-feign-demo01-consumer/src/main/resources/application.yaml
create mode 100644 labx-03/labx-03-sc-feign-demo01-provider/pom.xml
create mode 100644 labx-03/labx-03-sc-feign-demo01-provider/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/provider/DemoProviderApplication.java
create mode 100644 labx-03/labx-03-sc-feign-demo01-provider/src/main/resources/application.yaml
create mode 100644 labx-03/pom.xml
diff --git a/README.md b/README.md
index cf164c66..53f3f265 100644
--- a/README.md
+++ b/README.md
@@ -124,7 +124,7 @@
* [《芋道 Spring Cloud Alibaba 注册中心 Nacos 入门》](http://www.iocoder.cn/Spring-Cloud-Alibaba/Nacos-Discovery/?github) 对应 [labx-01](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-01)
* [《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》](http://www.iocoder.cn/Spring-Cloud-Netflix/Ribbon/?github) 对应 [labx-02](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-02)
-* 《芋道 Spring Cloud 声明式调用 OpenFeign 入门》
+* [《芋道 Spring Cloud 声明式调用 OpenFeign 入门》](http://www.iocoder.cn/Spring-Cloud/OpenFeign/?github) 对应 [labx-03](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-03)
* 《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》
* 《芋道 Spring Cloud Alibaba 配置中心 Nacos 入门》
* 《芋道 Spring Cloud Alibaba 服务容错 Sentinel 入门》
@@ -146,7 +146,7 @@
* 《芋道 Spring Cloud Alibaba 服务调用 Dubbo 入门》
* [《芋道 Spring Cloud Netflix 负载均衡 Ribbon 入门》](http://www.iocoder.cn/Spring-Cloud-Netflix/Ribbon/?github) 对应 [labx-02](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-02)
-* 《芋道 Spring Cloud 声明式调用 OpenFeign 入门》
+* [《芋道 Spring Cloud 声明式调用 OpenFeign 入门》](http://www.iocoder.cn/Spring-Cloud/OpenFeign/?github) 对应 [labx-03](https://github.com/YunaiV/SpringBoot-Labs/tree/master/labx-03)
## 服务容错
diff --git a/labx-03/labx-03-sc-feign-demo01-consumer/pom.xml b/labx-03/labx-03-sc-feign-demo01-consumer/pom.xml
new file mode 100644
index 00000000..1697d651
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-consumer/pom.xml
@@ -0,0 +1,70 @@
+
+
+
+ labx-01
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ labx-03-sc-feign-demo01-consumer
+
+
+ 2.2.4.RELEASE
+ Hoxton.SR1
+ 2.2.0.RELEASE
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${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
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
+
+
+
diff --git a/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/DemoConsumerApplication.java b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/DemoConsumerApplication.java
new file mode 100644
index 00000000..64a562c1
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/DemoConsumerApplication.java
@@ -0,0 +1,41 @@
+package cn.iocoder.springcloud.labx03.feigndemo.consumer;
+
+import cn.iocoder.springcloud.labx03.feigndemo.consumer.feign.DemoProviderFeignClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+public class DemoConsumerApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoConsumerApplication.class, args);
+ }
+
+ @Configuration
+ @EnableFeignClients
+ public class OpenFeignConfiguration {
+
+ }
+
+ @RestController
+ static class TestController {
+
+ @Autowired
+ private DemoProviderFeignClient demoProviderFeignClient;
+
+ @GetMapping("/hello02")
+ public String hello02(String name) {
+ // TODO 直接使用 RestTemplate 调用服务 `demo-provider`
+ String response = demoProviderFeignClient.echo(name);
+ // 返回结果
+ return "consumer:" + response;
+ }
+
+ }
+
+}
diff --git a/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/feign/DemoProviderFeignClient.java b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/feign/DemoProviderFeignClient.java
new file mode 100644
index 00000000..588cfff2
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/consumer/feign/DemoProviderFeignClient.java
@@ -0,0 +1,13 @@
+package cn.iocoder.springcloud.labx03.feigndemo.consumer.feign;
+
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "demo-provider")
+public interface DemoProviderFeignClient {
+
+ @GetMapping("/echo")
+ String echo(@RequestParam("name") String name);
+
+}
diff --git a/labx-03/labx-03-sc-feign-demo01-consumer/src/main/resources/application.yaml b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/resources/application.yaml
new file mode 100644
index 00000000..98cac55e
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-consumer/src/main/resources/application.yaml
@@ -0,0 +1,11 @@
+spring:
+ application:
+ name: demo-consumer # Spring 应用名
+ cloud:
+ nacos:
+ # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
+ discovery:
+ server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+
+server:
+ port: 28080 # 服务器端口。默认为 8080
diff --git a/labx-03/labx-03-sc-feign-demo01-provider/pom.xml b/labx-03/labx-03-sc-feign-demo01-provider/pom.xml
new file mode 100644
index 00000000..85d180c0
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-provider/pom.xml
@@ -0,0 +1,64 @@
+
+
+
+ labx-01
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ labx-03-sc-feign-demo01-provider
+
+
+ 2.2.4.RELEASE
+ Hoxton.SR1
+ 2.2.0.RELEASE
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ ${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
+
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+ com.alibaba.cloud
+ spring-cloud-starter-alibaba-nacos-discovery
+
+
+
+
diff --git a/labx-03/labx-03-sc-feign-demo01-provider/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/provider/DemoProviderApplication.java b/labx-03/labx-03-sc-feign-demo01-provider/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/provider/DemoProviderApplication.java
new file mode 100644
index 00000000..113819fe
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-provider/src/main/java/cn/iocoder/springcloud/labx03/feigndemo/provider/DemoProviderApplication.java
@@ -0,0 +1,39 @@
+package cn.iocoder.springcloud.labx03.feigndemo.provider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@SpringBootApplication
+public class DemoProviderApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DemoProviderApplication.class, args);
+ }
+
+ @RestController
+ static class TestController {
+
+ private Logger logger = LoggerFactory.getLogger(TestController.class);
+
+ @Value("${server.port}")
+ private Integer serverPort;
+
+ @GetMapping("/echo")
+ public String echo(String name) throws InterruptedException {
+ // 模拟执行 100ms 时长。方便后续我们测试请求超时
+// Thread.sleep(100L);
+
+ // 记录被调用的日志
+ logger.info("[echo][被调用啦 name({})]", name);
+
+ return serverPort + "-provider:" + name;
+ }
+
+ }
+
+}
diff --git a/labx-03/labx-03-sc-feign-demo01-provider/src/main/resources/application.yaml b/labx-03/labx-03-sc-feign-demo01-provider/src/main/resources/application.yaml
new file mode 100644
index 00000000..53225aa4
--- /dev/null
+++ b/labx-03/labx-03-sc-feign-demo01-provider/src/main/resources/application.yaml
@@ -0,0 +1,12 @@
+spring:
+ application:
+ name: demo-provider # Spring 应用名
+ cloud:
+ nacos:
+ # Nacos 作为注册中心的配置项,对应 NacosDiscoveryProperties 配置类
+ discovery:
+ server-addr: 127.0.0.1:8848 # Nacos 服务器地址
+
+server:
+ port: ${random.int[10000,19999]} # 服务器端口。默认为 8080
+# port: 18080 # 服务器端口。默认为 8080
diff --git a/labx-03/pom.xml b/labx-03/pom.xml
new file mode 100644
index 00000000..2b059275
--- /dev/null
+++ b/labx-03/pom.xml
@@ -0,0 +1,19 @@
+
+
+
+ labs-parent
+ cn.iocoder.springboot.labs
+ 1.0-SNAPSHOT
+
+ 4.0.0
+
+ labx-03
+
+
+ labx-03-sc-feign-demo01-provider
+ labx-03-sc-feign-demo01-consumer
+
+
+
diff --git a/pom.xml b/pom.xml
index b76a850f..0e935b69 100644
--- a/pom.xml
+++ b/pom.xml
@@ -60,6 +60,7 @@
lab-49
labx-01
labx-02
+ labx-03