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