From 2dd322f07fe462d965cefa47808fa811cef2ce14 Mon Sep 17 00:00:00 2001
From: DerekYRC <15521077528@163.com>
Date: Sat, 9 Apr 2022 10:06:19 +0800
Subject: [PATCH] =?UTF-8?q?=E9=9B=86=E6=88=90Feign=E7=AE=80=E5=8C=96?=
=?UTF-8?q?=E8=B0=83=E7=94=A8=E6=96=B9=E5=BC=8F(=E4=B8=80)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
.../pom.xml | 5 ++
.../cloud/examples/ConsumerApplication.java | 10 ++++
.../github/cloud/examples/EchoService.java | 15 ++++++
.../github/cloud/openfeign/FeignClient.java | 5 ++
.../openfeign/FeignClientFactoryBean.java | 6 ++-
.../openfeign/support/SpringMvcContract.java | 46 +++++++++++++++++++
pom.xml | 6 +++
8 files changed, 93 insertions(+), 2 deletions(-)
create mode 100644 mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/EchoService.java
create mode 100644 mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/support/SpringMvcContract.java
diff --git a/README.md b/README.md
index 871af07..81e6af0 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
* [服务注册](https://github.com/DerekYRC/mini-spring-cloud/blob/main/changelog.md#服务注册)
* [服务发现](https://github.com/DerekYRC/mini-spring-cloud/blob/main/changelog.md#服务发现)
* [负载均衡](https://github.com/DerekYRC/mini-spring-cloud/blob/main/changelog.md#集成ribbon实现客户端负载均衡)
-* [集成Feign简化调用]()
+* [集成Feign简化调用方式]()
* [流量控制]()
* [熔断降级]()
* [API 网关]()
diff --git a/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/pom.xml b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/pom.xml
index a545464..265f3ff 100644
--- a/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/pom.xml
+++ b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/pom.xml
@@ -34,6 +34,11 @@
mini-spring-cloud-load-balancer
+
+ com.github
+ mini-spring-cloud-openfeign
+
+
org.springframework.cloud
spring-cloud-starter-feign
diff --git a/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/ConsumerApplication.java b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/ConsumerApplication.java
index cb07b8f..276cd77 100644
--- a/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/ConsumerApplication.java
+++ b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/ConsumerApplication.java
@@ -1,5 +1,6 @@
package com.github.cloud.examples;
+import com.github.cloud.openfeign.EnableFeignClients;
import com.github.cloud.tutu.discovery.TutuDiscoveryClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
@@ -20,6 +21,7 @@ import java.util.List;
* @author derek(易仁川)
* @date 2022/3/20
*/
+@EnableFeignClients
@SpringBootApplication
public class ConsumerApplication {
@@ -54,6 +56,9 @@ public class ConsumerApplication {
@Autowired
private RestTemplate loadBalancedRestTemplate;
+ @Autowired
+ private EchoService echoService;
+
private RestTemplate restTemplate = new RestTemplate();
@GetMapping("/hello")
@@ -85,6 +90,11 @@ public class ConsumerApplication {
public String foo() {
return loadBalancedRestTemplate.postForObject("http://provider-application/echo", null, String.class);
}
+
+ @GetMapping("/bar")
+ public String bar() {
+ return echoService.echo();
+ }
}
}
diff --git a/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/EchoService.java b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/EchoService.java
new file mode 100644
index 0000000..02c8cb0
--- /dev/null
+++ b/mini-spring-cloud-examples/mini-spring-cloud-consumer-examples/src/main/java/com/github/cloud/examples/EchoService.java
@@ -0,0 +1,15 @@
+package com.github.cloud.examples;
+
+import com.github.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+
+/**
+ * @author derek(易仁川)
+ * @date 2022/4/9
+ */
+@FeignClient("provider-application")
+public interface EchoService {
+
+ @PostMapping("echo")
+ String echo();
+}
diff --git a/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClient.java b/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClient.java
index ffdaa7b..c4e8278 100644
--- a/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClient.java
+++ b/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClient.java
@@ -1,11 +1,16 @@
package com.github.cloud.openfeign;
+import java.lang.annotation.*;
+
/**
* Feign客户端注解
*
* @author derek(易仁川)
* @date 2022/4/7
*/
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
public @interface FeignClient {
/**
diff --git a/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClientFactoryBean.java b/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClientFactoryBean.java
index 2141931..dd9a0a5 100644
--- a/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClientFactoryBean.java
+++ b/mini-spring-cloud-openfeign/src/main/java/com/github/cloud/openfeign/FeignClientFactoryBean.java
@@ -1,5 +1,7 @@
package com.github.cloud.openfeign;
+import com.github.cloud.openfeign.support.SpringMvcContract;
+import feign.Feign;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.context.ApplicationContext;
@@ -21,7 +23,9 @@ public class FeignClientFactoryBean implements FactoryBean
+
+ com.github
+ mini-spring-cloud-openfeign
+ 1.0.0-SNAPSHOT
+
+
com.alibaba
fastjson