From 118c02144f1de831d0700a515368738552f8ef25 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子li <15040126243@163.com>
Date: 星期三, 27 一月 2021 15:15:03 +0800
Subject: [PATCH] 集成 Feign 接口化管理 Http请求(如短信,支付,推送等)

---
 ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java                     |    2 
 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java               |    1 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java     |   55 ++++++++++++++++++
 pom.xml                                                                       |   14 ++++
 ruoyi-admin/src/main/resources/application.yml                                |   10 +++
 ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java   |   24 ++++++++
 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java |   12 ++++
 ruoyi-common/pom.xml                                                          |   10 +++
 README.md                                                                     |    1 
 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java           |   13 ++++
 ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java      |    1 
 11 files changed, 143 insertions(+), 0 deletions(-)

diff --git a/README.md b/README.md
index 98ae2ce..7fc5dcc 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,7 @@
 * 瀹瑰櫒鏀瑰姩 Tomcat 鏀逛负 骞跺彂鎬ц兘鏇村ソ鐨� undertow
 * 浠g爜鐢熸垚妯℃澘 鏀逛负閫傞厤 Mybatis-Plus 鐨勪唬鐮�
 * 椤圭洰淇敼涓� maven澶氱幆澧冮厤缃�
+* 闆嗘垚 Feign 鎺ュ彛鍖栫鐞� Http 璇锋眰(濡備笁鏂硅姹� 鏀粯,鐭俊,鎺ㄩ�佺瓑)
 * 鍗囩骇MybatisPlus 3.4.2
 * 澧炲姞demo妯″潡绀轰緥(缁欎笉浼氬鍔犳ā鍧楃殑灏忎紮浼村仛鍙傝��)
 * 鍚屾鍗囩骇 3.3
diff --git a/pom.xml b/pom.xml
index 2b8a33f..41cda32 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,6 +33,8 @@
         <jwt.version>0.9.1</jwt.version>
         <mybatis-plus.version>3.4.2</mybatis-plus.version>
         <hutool.version>5.4.0</hutool.version>
+        <feign.version>2.2.6.RELEASE</feign.version>
+        <feign-okhttp.version>11.0</feign-okhttp.version>
     </properties>
 	
     <!-- 渚濊禆澹版槑 -->
@@ -183,6 +185,18 @@
                 <version>${hutool.version}</version>
             </dependency>
 
+            <dependency>
+                <groupId>org.springframework.cloud</groupId>
+                <artifactId>spring-cloud-starter-openfeign</artifactId>
+                <version>${feign.version}</version>
+            </dependency>
+
+            <dependency>
+                <groupId>io.github.openfeign</groupId>
+                <artifactId>feign-okhttp</artifactId>
+                <version>${feign-okhttp.version}</version>
+            </dependency>
+
             <!-- 瀹氭椂浠诲姟-->
             <dependency>
                 <groupId>com.ruoyi</groupId>
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
index 3ae6f96..4c87cc8 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
@@ -3,12 +3,14 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
+import org.springframework.cloud.openfeign.EnableFeignClients;
 
 /**
  * 鍚姩绋嬪簭
  * 
  * @author ruoyi
  */
+@EnableFeignClients
 @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 public class RuoYiApplication
 {
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 57a9344..a2c1950 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -190,3 +190,13 @@
   excludes: /system/notice/*
   # 鍖归厤閾炬帴
   urlPatterns: /system/*,/monitor/*,/tool/*
+
+feign:
+  # 寮�鍚帇缂�
+  compression:
+    request:
+      enabled: true
+    response:
+      enabled: true
+  okhttp:
+    enabled: true
\ No newline at end of file
diff --git a/ruoyi-common/pom.xml b/ruoyi-common/pom.xml
index 8d4f57b..4d55fb9 100644
--- a/ruoyi-common/pom.xml
+++ b/ruoyi-common/pom.xml
@@ -136,6 +136,16 @@
             <artifactId>lombok</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-okhttp</artifactId>
+        </dependency>
+
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
new file mode 100644
index 0000000..f4c5f44
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java
@@ -0,0 +1,24 @@
+package com.ruoyi.demo.controller;
+
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.demo.feign.FeignTestService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequiredArgsConstructor(onConstructor_ = @Autowired)
+@RestController
+@RequestMapping("/feign/test")
+public class FeignTestController {
+
+    private final FeignTestService feignTestService;
+
+    @GetMapping("/search/{wd}")
+    public AjaxResult search(@PathVariable String wd) {
+        String search = feignTestService.search(wd);
+        return AjaxResult.success("鎿嶄綔鎴愬姛",search);
+    }
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
new file mode 100644
index 0000000..4945f59
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java
@@ -0,0 +1,13 @@
+package com.ruoyi.demo.feign;
+
+import com.ruoyi.demo.feign.fallback.FeignTestFallback;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+@FeignClient(name = "baidu",url = "http://www.baidu.com",fallback = FeignTestFallback.class)
+public interface FeignTestService {
+
+    @GetMapping("/s")
+    String search(@RequestParam("wd") String wd);
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
new file mode 100644
index 0000000..f2012f9
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java
@@ -0,0 +1,12 @@
+package com.ruoyi.demo.feign.fallback;
+
+
+import com.ruoyi.demo.feign.FeignTestService;
+
+public class FeignTestFallback implements FeignTestService {
+
+    @Override
+    public String search(String wd) {
+        return null;
+    }
+}
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
new file mode 100644
index 0000000..47983a0
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
@@ -0,0 +1 @@
+package com.ruoyi.demo.feign.fallback;
\ No newline at end of file
diff --git a/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
new file mode 100644
index 0000000..91e4b4a
--- /dev/null
+++ b/ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
@@ -0,0 +1 @@
+package com.ruoyi.demo.feign;
\ No newline at end of file
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
new file mode 100644
index 0000000..cdb0c8b
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java
@@ -0,0 +1,55 @@
+package com.ruoyi.framework.config;
+
+import feign.*;
+import okhttp3.ConnectionPool;
+import okhttp3.OkHttpClient;
+import org.springframework.boot.autoconfigure.AutoConfigureBefore;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import org.springframework.cloud.openfeign.FeignAutoConfiguration;
+import org.springframework.cloud.openfeign.support.SpringMvcContract;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.concurrent.TimeUnit;
+
+@Configuration
+@ConditionalOnClass(Feign.class)
+@AutoConfigureBefore(FeignAutoConfiguration.class)
+public class FeignConfig {
+
+    @Bean
+    public OkHttpClient okHttpClient(){
+        return new OkHttpClient.Builder()
+                .readTimeout(60, TimeUnit.SECONDS)
+                .connectTimeout(60, TimeUnit.SECONDS)
+                .writeTimeout(120, TimeUnit.SECONDS)
+                .connectionPool(new ConnectionPool())
+                .build();
+    }
+
+    @Bean
+    public Feign.Builder feignBuilder() {
+        return Feign.builder();
+    }
+
+    @Bean
+    public Contract feignContract() {
+        return new SpringMvcContract();
+    }
+
+    @Bean
+    public Logger.Level feignLoggerLevel() {
+        return Logger.Level.BASIC;
+    }
+
+    @Bean
+    public Request.Options feignRequestOptions() {
+        return new Request.Options(10, TimeUnit.SECONDS, 60,TimeUnit.SECONDS,true);
+    }
+
+    @Bean
+    public Retryer feignRetry() {
+        return new Retryer.Default();
+    }
+
+}
\ No newline at end of file

--
Gitblit v1.9.3