From 7b59766c172eec2ff42fe14d013159ab0ecbf31f Mon Sep 17 00:00:00 2001 From: koltZhang Date: Wed, 4 Sep 2024 09:40:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=80=E5=90=AFsentinel=20feign=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=B9=B6=E6=B7=BB=E5=8A=A0demo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../infra/api/demo/SentinelFeigenDemoApi.java | 23 +++++++++++++++ .../fallback/SentinelFeigenDemoFallback.java | 15 ++++++++++ .../infra/api/demo/SentinelFeigenApiImpl.java | 21 ++++++++++++++ .../src/main/resources/application.yaml | 6 ++++ .../demo/SentinelFeigenDemoController.java | 28 +++++++++++++++++++ .../rpc/config/RpcConfiguration.java | 7 ++++- .../src/main/resources/application.yaml | 7 +++++ 7 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenDemoApi.java create mode 100644 yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/fallback/SentinelFeigenDemoFallback.java create mode 100644 yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenApiImpl.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/demo/SentinelFeigenDemoController.java diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenDemoApi.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenDemoApi.java new file mode 100644 index 000000000..a8347516e --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenDemoApi.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.infra.api.demo; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.infra.api.demo.fallback.SentinelFeigenDemoFallback; +import cn.iocoder.yudao.module.infra.enums.ApiConstants; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * sentinel Feign demo + */ +@FeignClient(name = ApiConstants.NAME, fallback = SentinelFeigenDemoFallback.class) +public interface SentinelFeigenDemoApi { + + String PREFIX = ApiConstants.PREFIX + "/provider/sentinel"; + + + @GetMapping(PREFIX +"/test/{message}") + public CommonResult providerSentinelTest(@PathVariable("message") String message); + +} diff --git a/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/fallback/SentinelFeigenDemoFallback.java b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/fallback/SentinelFeigenDemoFallback.java new file mode 100644 index 000000000..c5f4bee5b --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-api/src/main/java/cn/iocoder/yudao/module/infra/api/demo/fallback/SentinelFeigenDemoFallback.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.infra.api.demo.fallback; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.infra.api.demo.SentinelFeigenDemoApi; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; + +@Component +public class SentinelFeigenDemoFallback implements SentinelFeigenDemoApi { + + @Override + public CommonResult providerSentinelTest(String message) { + return CommonResult.error(HttpStatus.TOO_MANY_REQUESTS.value(), "对方服务不可用,开始服务降级处理"); + } +} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenApiImpl.java b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenApiImpl.java new file mode 100644 index 000000000..805a52cca --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/java/cn/iocoder/yudao/module/infra/api/demo/SentinelFeigenApiImpl.java @@ -0,0 +1,21 @@ +package cn.iocoder.yudao.module.infra.api.demo; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +/** + * 提供 RESTful API 接口,给 Feign 调用 + */ +@RestController +@Validated +public class SentinelFeigenApiImpl implements SentinelFeigenDemoApi { + + + @Override + public CommonResult providerSentinelTest(String message) { + return success("OK"); + } +} diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml index 6cf12fc7b..584464471 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application.yaml @@ -179,3 +179,9 @@ yudao: - infra_data_source_config debug: false + +--- #################### 开启feign对sentinel的支持 #################### + +feign: + sentinel: + enabled: true diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/demo/SentinelFeigenDemoController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/demo/SentinelFeigenDemoController.java new file mode 100644 index 000000000..87837ca66 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/demo/SentinelFeigenDemoController.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.system.controller.admin.demo; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.infra.api.demo.SentinelFeigenDemoApi; +import io.swagger.v3.oas.annotations.tags.Tag; +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; + +import javax.annotation.Resource; +import javax.annotation.security.PermitAll; + +@Tag(name = "管理后台 - Sentinel Feigen Demo") +@RestController() +@RequestMapping("/system/sentinel/demo") +public class SentinelFeigenDemoController { + + @Resource + private SentinelFeigenDemoApi sentinelFeigenDemoApiService; + + @GetMapping("/provider/{message}") + @PermitAll + public CommonResult providerSentinelTest(@PathVariable("message") String message) { + return sentinelFeigenDemoApiService.providerSentinelTest(message); + } +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java index c29757003..2fabe76d6 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/framework/rpc/config/RpcConfiguration.java @@ -1,12 +1,17 @@ package cn.iocoder.yudao.module.system.framework.rpc.config; import cn.iocoder.yudao.module.infra.api.config.ConfigApi; +import cn.iocoder.yudao.module.infra.api.demo.SentinelFeigenDemoApi; +import cn.iocoder.yudao.module.infra.api.demo.fallback.SentinelFeigenDemoFallback; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.infra.api.websocket.WebSocketSenderApi; import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.cloud.openfeign.FeignClientsConfiguration; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; @Configuration(proxyBeanMethods = false) -@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, ConfigApi.class}) +@EnableFeignClients(clients = {FileApi.class, WebSocketSenderApi.class, ConfigApi.class, SentinelFeigenDemoApi.class}) +@Import({SentinelFeigenDemoFallback.class}) public class RpcConfiguration { } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml index 533c34162..54ec8d2da 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application.yaml @@ -174,6 +174,7 @@ yudao: - /rpc-api/system/tenant/valid # 防止递归。避免调用 /rpc-api/system/tenant/valid 接口时,又去触发 /rpc-api/system/tenant/valid 去校验 - /rpc-api/system/tenant/id-list # 获得租户列表的时候,无需传递租户编号 - /rpc-api/system/oauth2/token/check # 访问令牌校验时,无需传递租户编号;主要解决上传文件的场景,前端不会传递 tenant-id! + - /admin-api/system/sentinel/demo/provider/* # 示例演示,演示 Sentinel 熔断降级 ignore-tables: - system_tenant - system_tenant_package @@ -205,3 +206,9 @@ yudao: end-code: 9999 # 这里配置 9999 的原因是,测试方便。 debug: false + +--- #################### 开启feign对sentinel的支持 #################### + +feign: + sentinel: + enabled: true \ No newline at end of file