瀏覽代碼

集成 Feign 接口化管理 Http请求(如短信,支付,推送等)

疯狂的狮子li 4 年之前
父節點
當前提交
118c02144f

+ 1 - 0
README.md

@@ -24,6 +24,7 @@
 * 容器改动 Tomcat 改为 并发性能更好的 undertow
 * 代码生成模板 改为适配 Mybatis-Plus 的代码
 * 项目修改为 maven多环境配置
+* 集成 Feign 接口化管理 Http 请求(如三方请求 支付,短信,推送等)
 * 升级MybatisPlus 3.4.2
 * 增加demo模块示例(给不会增加模块的小伙伴做参考)
 * 同步升级 3.3

+ 14 - 0
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>

+ 2 - 0
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@@ -3,12 +3,14 @@ package com.ruoyi;
 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
 {

+ 10 - 0
ruoyi-admin/src/main/resources/application.yml

@@ -190,3 +190,13 @@ xss:
   excludes: /system/notice/*
   # 匹配链接
   urlPatterns: /system/*,/monitor/*,/tool/*
+
+feign:
+  # 开启压缩
+  compression:
+    request:
+      enabled: true
+    response:
+      enabled: true
+  okhttp:
+    enabled: true

+ 10 - 0
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>

+ 24 - 0
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);
+    }
+}

+ 13 - 0
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);
+}

+ 12 - 0
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;
+    }
+}

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java

@@ -0,0 +1 @@
+package com.ruoyi.demo.feign.fallback;

+ 1 - 0
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java

@@ -0,0 +1 @@
+package com.ruoyi.demo.feign;

+ 55 - 0
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();
+    }
+
+}