From 6cb44520c38a27e683b2002d77f7100eb35ada8f Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Sun, 9 Feb 2025 21:18:07 +0800 Subject: [PATCH] =?UTF-8?q?feat(openFeign):=20=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E9=99=90=E6=B5=81=E8=BF=94=E5=9B=9E=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/bunny/dao/vo/result/Result.java | 3 +- .../cn/bunny/config/CloudConfiguration.java | 10 +++++++ .../config/CustomerBlockExceptionHandler.java | 29 +++++++++++++++++++ .../src/main/resources/application-dev.yml | 1 - .../src/main/resources/application-prod.yml | 1 - .../src/main/resources/application-test.yml | 1 - .../src/main/resources/application.yml | 10 +++++++ .../src/main/resources/application.yml | 26 +++++++++++++++++ service/pom.xml | 12 ++++++-- 9 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 service/cloud-demo1/src/main/java/cn/bunny/config/CustomerBlockExceptionHandler.java diff --git a/dao/src/main/java/cn/bunny/dao/vo/result/Result.java b/dao/src/main/java/cn/bunny/dao/vo/result/Result.java index cb74d9f..b898f4c 100644 --- a/dao/src/main/java/cn/bunny/dao/vo/result/Result.java +++ b/dao/src/main/java/cn/bunny/dao/vo/result/Result.java @@ -36,6 +36,7 @@ public class Result { */ public static Result build(T body, ResultCodeEnum codeEnum) { Result result = build(body); + result.setData(body); result.setCode(codeEnum.getCode()); result.setMessage(codeEnum.getMessage()); return result; @@ -53,7 +54,7 @@ public class Result { Result result = build(body); result.setCode(code); result.setMessage(message); - result.setData(null); + result.setData(body); return result; } diff --git a/service/cloud-demo1/src/main/java/cn/bunny/config/CloudConfiguration.java b/service/cloud-demo1/src/main/java/cn/bunny/config/CloudConfiguration.java index fb54469..f256826 100644 --- a/service/cloud-demo1/src/main/java/cn/bunny/config/CloudConfiguration.java +++ b/service/cloud-demo1/src/main/java/cn/bunny/config/CloudConfiguration.java @@ -4,6 +4,7 @@ import com.alibaba.cloud.nacos.NacosConfigManager; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.config.listener.Listener; import feign.Logger; +import feign.Retryer; import org.springframework.boot.ApplicationRunner; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; @@ -51,4 +52,13 @@ public class CloudConfiguration { }); }; } + + /** + * 重试机制 + */ + @Bean + public Retryer retryer() { + // 使用默认重试机制,根据之前设置的值配置有关 + return new Retryer.Default(); + } } diff --git a/service/cloud-demo1/src/main/java/cn/bunny/config/CustomerBlockExceptionHandler.java b/service/cloud-demo1/src/main/java/cn/bunny/config/CustomerBlockExceptionHandler.java new file mode 100644 index 0000000..9a78302 --- /dev/null +++ b/service/cloud-demo1/src/main/java/cn/bunny/config/CustomerBlockExceptionHandler.java @@ -0,0 +1,29 @@ +package cn.bunny.config; + +import cn.bunny.dao.vo.result.Result; +import com.alibaba.csp.sentinel.adapter.spring.webmvc_v6x.callback.BlockExceptionHandler; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.alibaba.fastjson2.JSON; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.stereotype.Component; + +import java.io.PrintWriter; + +@Component +public class CustomerBlockExceptionHandler implements BlockExceptionHandler { + /** + * 自定义限流返回内容 + */ + @Override + public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, String s, BlockException e) throws Exception { + httpServletResponse.setContentType("application/json;charset=utf-8"); + Result result = Result.error(null, 429, "太快了..."); + + try (PrintWriter writer = httpServletResponse.getWriter()) { + Object json = JSON.toJSON(result); + writer.println(json); + writer.flush(); + } + } +} diff --git a/service/cloud-demo1/src/main/resources/application-dev.yml b/service/cloud-demo1/src/main/resources/application-dev.yml index d304bba..e76d513 100644 --- a/service/cloud-demo1/src/main/resources/application-dev.yml +++ b/service/cloud-demo1/src/main/resources/application-dev.yml @@ -5,7 +5,6 @@ spring: - nacos:database.yml?group=order cloud: nacos: - server-addr: 192.168.3.132 config: import-check: enabled: false \ No newline at end of file diff --git a/service/cloud-demo1/src/main/resources/application-prod.yml b/service/cloud-demo1/src/main/resources/application-prod.yml index d304bba..e76d513 100644 --- a/service/cloud-demo1/src/main/resources/application-prod.yml +++ b/service/cloud-demo1/src/main/resources/application-prod.yml @@ -5,7 +5,6 @@ spring: - nacos:database.yml?group=order cloud: nacos: - server-addr: 192.168.3.132 config: import-check: enabled: false \ No newline at end of file diff --git a/service/cloud-demo1/src/main/resources/application-test.yml b/service/cloud-demo1/src/main/resources/application-test.yml index d304bba..e76d513 100644 --- a/service/cloud-demo1/src/main/resources/application-test.yml +++ b/service/cloud-demo1/src/main/resources/application-test.yml @@ -5,7 +5,6 @@ spring: - nacos:database.yml?group=order cloud: nacos: - server-addr: 192.168.3.132 config: import-check: enabled: false \ No newline at end of file diff --git a/service/cloud-demo1/src/main/resources/application.yml b/service/cloud-demo1/src/main/resources/application.yml index c0de666..0cda823 100644 --- a/service/cloud-demo1/src/main/resources/application.yml +++ b/service/cloud-demo1/src/main/resources/application.yml @@ -7,7 +7,10 @@ spring: active: dev cloud: nacos: + server-addr: 192.168.3.132 config: + import-check: + enabled: false namespace: ${spring.profiles.active:public} # 后面是默认 namespace openfeign: client: @@ -28,3 +31,10 @@ spring: # 压缩响应请求 response: enabled: true + sentinel: + transport: + dashboard: 192.168.3.132:8858 + eager: true # 项目启动就连接 +feign: + sentinel: + enabled: true \ No newline at end of file diff --git a/service/cloud-demo2/src/main/resources/application.yml b/service/cloud-demo2/src/main/resources/application.yml index 352e0bc..9984998 100644 --- a/service/cloud-demo2/src/main/resources/application.yml +++ b/service/cloud-demo2/src/main/resources/application.yml @@ -13,3 +13,29 @@ spring: config: import-check: enabled: false + openfeign: + client: + config: + service-cloud1: # 针对自己的这个配置 + logger-level: full + connect-timeout: 3000 + read-timeout: 5000 + default: # 针对默认配置 + logger-level: full + connect-timeout: 3000 + read-timeout: 5000 + compression: + # 压缩请求 + request: + enabled: true + min-request-size: 4096 # 压缩最小值 为4096 = 4KB + # 压缩响应请求 + response: + enabled: true + sentinel: + transport: + dashboard: 192.168.3.132:8858 + eager: true # 项目启动就连接 +feign: + sentinel: + enabled: true \ No newline at end of file diff --git a/service/pom.xml b/service/pom.xml index 2d7cd45..1380247 100644 --- a/service/pom.xml +++ b/service/pom.xml @@ -62,6 +62,11 @@ org.springframework.boot spring-boot-starter-thymeleaf + + + com.github.xiaoymin + knife4j-openapi3-jakarta-spring-boot-starter + com.alibaba.cloud @@ -77,14 +82,15 @@ org.springframework.cloud spring-cloud-starter-loadbalancer + org.springframework.cloud spring-cloud-starter-openfeign - + - com.github.xiaoymin - knife4j-openapi3-jakarta-spring-boot-starter + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel