疯狂的狮子li
2021-01-27 118c02144f1de831d0700a515368738552f8ef25
集成 Feign 接口化管理 Http请求(如短信,支付,推送等)
已修改5个文件
已添加6个文件
143 ■■■■■ 文件已修改
README.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/resources/application.yml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-common/pom.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/controller/FeignTestController.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/FeignTestService.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/FeignTestFallback.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-framework/src/main/java/com/ruoyi/framework/config/FeignConfig.java 55 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README.md
@@ -24,6 +24,7 @@
* å®¹å™¨æ”¹åЍ Tomcat æ”¹ä¸º å¹¶å‘性能更好的 undertow
* ä»£ç ç”Ÿæˆæ¨¡æ¿ æ”¹ä¸ºé€‚配 Mybatis-Plus çš„代码
* é¡¹ç›®ä¿®æ”¹ä¸º maven多环境配置
* é›†æˆ Feign æŽ¥å£åŒ–管理 Http è¯·æ±‚(如三方请求 æ”¯ä»˜,短信,推送等)
* å‡çº§MybatisPlus 3.4.2
* å¢žåŠ demo模块示例(给不会增加模块的小伙伴做参考)
* åŒæ­¥å‡çº§ 3.3
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>
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
{
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
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>
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);
    }
}
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);
}
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;
    }
}
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/fallback/package-info.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
package com.ruoyi.demo.feign.fallback;
ruoyi-demo/src/main/java/com/ruoyi/demo/feign/package-info.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1 @@
package com.ruoyi.demo.feign;
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();
    }
}