From c641f54f429c291aef427ad301c452b2da4d30c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com> Date: Thu, 16 Feb 2023 09:09:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E7=BD=91=E5=85=B3=E6=9C=8D=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ConsumerUserController.java | 20 +++ .../src/main/resources/bootstrap.yml | 7 +- nacos-server-gateway/pom.xml | 66 ++-------- .../GatewayApplication.java | 25 ---- .../constant/RespConstant.java | 6 - .../controller/FlowLimitController.java | 120 ------------------ .../controller/LocalController.java | 52 -------- .../controller/SentinelController.java | 70 ---------- .../handler/UrlBlockHandler.java | 47 ------- .../src/main/resources/bootstrap.yml | 56 +++++--- .../SentinelConsumerApplicationTests.java | 13 -- pom.xml | 24 ++-- 12 files changed, 88 insertions(+), 418 deletions(-) delete mode 100644 nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/constant/RespConstant.java delete mode 100644 nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/FlowLimitController.java delete mode 100644 nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/LocalController.java delete mode 100644 nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/SentinelController.java delete mode 100644 nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java delete mode 100644 nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java diff --git a/nacos-server-consumer/src/main/java/com/kwan/springcloudalibaba/controller/ConsumerUserController.java b/nacos-server-consumer/src/main/java/com/kwan/springcloudalibaba/controller/ConsumerUserController.java index b87320a..35d6d91 100644 --- a/nacos-server-consumer/src/main/java/com/kwan/springcloudalibaba/controller/ConsumerUserController.java +++ b/nacos-server-consumer/src/main/java/com/kwan/springcloudalibaba/controller/ConsumerUserController.java @@ -120,9 +120,29 @@ public class ConsumerUserController { /** * 获取配置的变量 + *

+ * http://127.0.0.1:8085/nacos/consumer/nameInfo */ @GetMapping(value = "/nameInfo", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE) public Result nameInfo() { return Result.ok(); } + + + /** + * http://127.0.0.1:8085/nacos/consumer/test + */ + @GetMapping(value = "/test", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE) + public Result test() { + return Result.ok(); + } + + + /** + * 获取配置的变量 + */ + @GetMapping(value = "/index", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE) + public Result index() { + return Result.ok(); + } } \ No newline at end of file diff --git a/nacos-server-consumer/src/main/resources/bootstrap.yml b/nacos-server-consumer/src/main/resources/bootstrap.yml index 22f7dde..6ab670c 100644 --- a/nacos-server-consumer/src/main/resources/bootstrap.yml +++ b/nacos-server-consumer/src/main/resources/bootstrap.yml @@ -16,8 +16,5 @@ spring: server-addr: http://120.79.36.53:8848 #配置中心地址 file-extension: yaml #文件类型 group: DEV_GROUP #组别 - namespace: e750dcd5-657b-489b-8d15-b7b71aa3e984 #命名空间 - refresh-enabled: true #默认自动刷新 - - - + namespace: 4cd9bd32-8f25-45cd-b919-df1a0df146e0 #命名空间 + refresh-enabled: true #默认自动刷新 \ No newline at end of file diff --git a/nacos-server-gateway/pom.xml b/nacos-server-gateway/pom.xml index d640725..561120d 100644 --- a/nacos-server-gateway/pom.xml +++ b/nacos-server-gateway/pom.xml @@ -14,74 +14,36 @@ nacos-server-gateway - - com.kwan.springcloudalibaba - nacos-server-feign-api - 1.0.0-SNAPSHOT - - - org.springframework.boot - spring-boot-starter-web - + org.springframework.boot - spring-boot-starter-test - test + spring-boot-starter-actuator + com.alibaba.cloud spring-cloud-starter-alibaba-nacos-discovery - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - org.springframework.boot - spring-boot-starter-actuator - - - org.projectlombok - lombok - - - com.alibaba.csp - sentinel-core - - - - com.alibaba.csp - sentinel-transport-simple-http + org.springframework.cloud + spring-cloud-starter-gateway + 2.1.5.RELEASE - + + com.alibaba.cloud spring-cloud-starter-alibaba-sentinel - - - com.alibaba.csp - sentinel-datasource-nacos - - - junit - junit - - - org.springframework.cloud - spring-cloud-starter-openfeign - 2.0.0.RELEASE - - - org.springframework.cloud - spring-cloud-starter-netflix-ribbon - 2.0.0.RELEASE + org.projectlombok + lombok + true - com.alibaba.csp - sentinel-spring-webmvc-adapter - 1.8.2 + org.springframework.boot + spring-boot-starter-test + test diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/GatewayApplication.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/GatewayApplication.java index 6df2a84..f7e5192 100644 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/GatewayApplication.java +++ b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/GatewayApplication.java @@ -1,38 +1,13 @@ package com.kwan.springcloudalibaba; -import com.alibaba.cloud.nacos.ribbon.NacosRule; -import com.netflix.loadbalancer.IPing; -import com.netflix.loadbalancer.IRule; -import com.netflix.loadbalancer.PingUrl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.annotation.Bean; - -/** - * http://localhost:18088/sentinel/nameInfo - * - * @author : qinyingjie - * @version : 2.2.0 - * @date : 2023/1/17 12:37 - */ -@EnableFeignClients @EnableDiscoveryClient @SpringBootApplication public class GatewayApplication { - @Bean - public IRule randomRule() { - return new NacosRule(); //nacos的策略 - } - - @Bean - public IPing iping() { - return new PingUrl(); - } - public static void main(String[] args) { SpringApplication.run(GatewayApplication.class, args); System.out.println("-------------------------------网关服务启动成功-------------------------------"); diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/constant/RespConstant.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/constant/RespConstant.java deleted file mode 100644 index 6deffcf..0000000 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/constant/RespConstant.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.kwan.springcloudalibaba.constant; - -public class RespConstant { - public static final Integer RESP_CODE_FLOW_LIMITING_EXCEPTION = 441; - public static final String RESP_MSG_FLOW_LIMITING_EXCEPTION = "流量控制"; -} diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/FlowLimitController.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/FlowLimitController.java deleted file mode 100644 index 566b234..0000000 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/FlowLimitController.java +++ /dev/null @@ -1,120 +0,0 @@ -package com.kwan.springcloudalibaba.controller; - -import com.alibaba.csp.sentinel.annotation.SentinelResource; -import com.alibaba.csp.sentinel.slots.block.BlockException; -import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.concurrent.TimeUnit; - -/** - * 限流测试 - * http://localhost:18088/sentinel/nameInfo - * - * @author : qinyingjie - * @version : 2.2.0 - * @date : 2023/2/2 17:13 - */ -@Slf4j -@RestController -@RequestMapping("/flowLimit") -public class FlowLimitController { - - - /** - * http://127.0.0.1:8086/flowLimit/testA - */ - @GetMapping("/testA") - public String testA() { - System.out.println("------ testA ------"); - return "------testA"; - } - - @GetMapping("/testB") - public String testB() { - try { - TimeUnit.SECONDS.sleep(3); - } catch (InterruptedException e) { - e.printStackTrace(); - } - System.out.println("------ testB ------"); - return "------testB"; - } - - @GetMapping("/testC") - public String testC() { - try { - int a = 1 / 0; - System.out.println("------ testC ------"); - } catch (Exception e) { - e.printStackTrace(); - } - return "------testC"; - } - - @GetMapping("/testD") - public String testD() { - try { - TimeUnit.SECONDS.sleep(1); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "------testD"; - } - - @SentinelResource - @GetMapping("/testE") - public String testDD() { - try { - TimeUnit.SECONDS.sleep(100); - } catch (InterruptedException e) { - e.printStackTrace(); - } - return "------testE"; - } - - /** - * 热点规则 - * - * @param p1 - * @param p2 - * @return - */ - @GetMapping("/testHotKey") - @SentinelResource(value = "testHotKey") - public String testHotKey(@RequestParam(value = "p1", required = false) String p1, - @RequestParam(value = "p2", required = false) String p2) { - return "------testHotKey"; - } - - - @GetMapping("/testHotKey2") - @SentinelResource(value = "testHotKey2", blockHandler = "dealHandler_testHotKey") - public String testHotKey2(@RequestParam(value = "p1", required = false) String p1, - @RequestParam(value = "p2", required = false) String p2) { - log.info("testE 热点参数"); - return "------testHotKey2"; - } - - /** - * 自定义异常 - * - * @param p1 - * @param p2 - * @param exception - * @return - */ - public String dealHandler_testHotKey(String p1, String p2, BlockException exception) { - // 默认 Blocked by Sentinel (flow limiting) - return "-----dealHandler_testHotKey"; - } - - @GetMapping("/persistent") - public String persistent() { - log.info("persistent 测试持久化"); - return "------persistent 测试持久化"; - } -} \ No newline at end of file diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/LocalController.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/LocalController.java deleted file mode 100644 index dd52ad4..0000000 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/LocalController.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.kwan.springcloudalibaba.controller; - -import com.alibaba.csp.sentinel.Entry; -import com.alibaba.csp.sentinel.SphU; -import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.alibaba.csp.sentinel.slots.block.RuleConstant; -import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; -import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; - - -@RestController -public class LocalController { - - public static void main(String[] args) { - initFlowRules(); - while (true) { - Entry entry = null; - try { - entry = SphU.entry("HelloWorld"); - /*您的业务逻辑 - 开始*/ - System.out.println("hello world"); - /*您的业务逻辑 - 结束*/ - } catch (BlockException e1) { - /*流控逻辑处理 - 开始*/ - System.out.println("block!"); - /*流控逻辑处理 - 结束*/ - } finally { - if (entry != null) { - entry.exit(); - } - } - } - } - - /** - * 资源 HelloWorld 每秒最多只能通过 20 个请求。 - */ - private static void initFlowRules() { - List rules = new ArrayList<>(); - FlowRule rule = new FlowRule(); - rule.setResource("HelloWorld"); - rule.setGrade(RuleConstant.FLOW_GRADE_QPS); - // Set limit QPS to 20. - rule.setCount(1); - rules.add(rule); - FlowRuleManager.loadRules(rules); - } -} \ No newline at end of file diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/SentinelController.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/SentinelController.java deleted file mode 100644 index 2caa132..0000000 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/controller/SentinelController.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.kwan.springcloudalibaba.controller; - -import com.alibaba.csp.sentinel.annotation.SentinelResource; -import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.kwan.springcloudalibaba.api.FeignUserService; -import com.kwan.springcloudalibaba.common.Result; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.http.MediaType; -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; - -/** - * http://localhost:18088/sentinel/nameInfo - * - * @author : qinyingjie - * @version : 2.2.0 - * @date : 2023/2/2 17:13 - */ -@RestController -@RequestMapping("/sentinel") -public class SentinelController { - @Autowired - private FeignUserService feignUserService; - - /** - * feign调用 - * http://127.0.0.1:8085/nacos/consumer/1 - *

- * http://localhost:9091/user/1 - * - * @param id - * @return - */ - @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE) - public Result getUserById(@PathVariable Integer id) { - return Result.ok(feignUserService.selectOne(id)); - } - - /** - * 获取配置的变量 - * http://localhost:8086/sentinel/nameInfo - */ - @GetMapping(value = "/nameInfo", produces = MediaType.APPLICATION_PROBLEM_JSON_VALUE) - public Result nameInfo() { - return Result.ok(); - } - - /** - * http://localhost:8086/sentinel/world - * - * @return - */ - @GetMapping("/world") - @SentinelResource(value = "helloWorld", blockHandler = "helloBlock") - public String helloWorld() { - return "Hello world"; - } - - /** - * 回调地址 - * - * @param e - * @return - */ - public String helloBlock(BlockException e) { - return "你已被流控"; - } -} \ No newline at end of file diff --git a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java b/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java deleted file mode 100644 index 5f44b39..0000000 --- a/nacos-server-gateway/src/main/java/com/kwan/springcloudalibaba/handler/UrlBlockHandler.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.kwan.springcloudalibaba.handler; - -import com.alibaba.csp.sentinel.adapter.spring.webmvc.callback.BlockExceptionHandler; -import com.alibaba.csp.sentinel.slots.block.BlockException; -import com.alibaba.csp.sentinel.slots.block.authority.AuthorityException; -import com.alibaba.csp.sentinel.slots.block.degrade.DegradeException; -import com.alibaba.csp.sentinel.slots.block.flow.FlowException; -import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowException; -import com.alibaba.csp.sentinel.slots.system.SystemBlockException; -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.kwan.springcloudalibaba.common.Result; -import org.springframework.stereotype.Component; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -@Component -public class UrlBlockHandler implements BlockExceptionHandler { - - @Override - public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws Exception { - String msg = null; - if (e instanceof FlowException) {//限流异常 - msg = "接口已被限流"; - } else if (e instanceof DegradeException) {//熔断异常 - msg = "接口已被熔断,请稍后再试"; - } else if (e instanceof ParamFlowException) { //热点参数限流 - msg = "热点参数限流"; - } else if (e instanceof SystemBlockException) { //系统规则异常 - msg = "系统规则(负载不满足要求)"; - } else if (e instanceof AuthorityException) { //授权规则异常 - msg = "授权规则不通过"; - } - httpServletResponse.setStatus(500); - httpServletResponse.setCharacterEncoding("UTF-8"); - httpServletResponse.setContentType("application/json;charset=utf-8"); - //ObjectMapper是内置Jackson的序列化工具类,这用于将对象转为JSON字符串 - ObjectMapper mapper = new ObjectMapper(); - //某个对象属性为null时不进行序列化输出 - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - mapper.writeValue(httpServletResponse.getWriter(), - Result.error(300, msg) - ); - } - -} \ No newline at end of file diff --git a/nacos-server-gateway/src/main/resources/bootstrap.yml b/nacos-server-gateway/src/main/resources/bootstrap.yml index 0919312..fc83031 100644 --- a/nacos-server-gateway/src/main/resources/bootstrap.yml +++ b/nacos-server-gateway/src/main/resources/bootstrap.yml @@ -1,34 +1,52 @@ #端口号 server: - port: 8088 + port: 8089 + +management: + endpoint: + health: + show-details: always + endpoints: + jmx: + exposure: + include: '*' + web: + exposure: + include: '*' + health: + sentinel: + enabled: false #spring配置 spring: application: - name: nacos-server-sentinel-consumer + name: nacos-server-gateway profiles: active: dev cloud: + gateway: + enabled: true #开启网关 + discovery: + locator: + enabled: true #启用DiscoveryClient + routes: + - id: route1 + uri: lb://nacos-server-consumer + predicates: + - Path=/nacos/consumer/test,/nacos/consumer/index + - id: route2 + uri: lb://nacos-server-producer + predicates: + - Path=/service/** + filter: + - AddRequestHeader=X-Request-Id,12345 + nacos: discovery: server-addr: http://120.79.36.53:8848 #服务注册地址 - config: - server-addr: http://120.79.36.53:8848 #配置中心地址 - file-extension: yaml #文件类型 - group: DEV_GROUP #组别 - namespace: 4cd9bd32-8f25-45cd-b919-df1a0df146e0 #命名空间 - refresh-enabled: true #默认自动刷新 + username: nacos + password: nacos sentinel: transport: dashboard: 127.0.0.1:8181 - port: 8719 #默认端口,如果被占用则从8719依次+1扫描 - datasource: - ds1: - nacos: - server-addr: http://120.79.36.53:8848 - username: nacos - password: nacos - dataId: nacos-server-sentinel-consumer # 微服务名称 - groupId: DEFAULT_GROUP - data-type: json - rule-type: flow # 流控规则 \ No newline at end of file + port: 8719 #默认端口,如果被占用则从8719依次+1扫描 \ No newline at end of file diff --git a/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java b/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java deleted file mode 100644 index 9a5f4be..0000000 --- a/nacos-server-gateway/src/test/java/com/kwan/springcloudalibaba/SentinelConsumerApplicationTests.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.kwan.springcloudalibaba; - -import org.junit.jupiter.api.Test; -import org.springframework.boot.test.context.SpringBootTest; - -@SpringBootTest -class SentinelConsumerApplicationTests { - - @Test - void contextLoads() { - } - -} diff --git a/pom.xml b/pom.xml index 80446cb..dfd9998 100644 --- a/pom.xml +++ b/pom.xml @@ -15,8 +15,8 @@ 1.8 UTF-8 UTF-8 - 2.3.7.RELEASE - 2.2.2.RELEASE + 2.2.5.RELEASE + 2.2.1.RELEASE @@ -45,14 +45,20 @@ ${spring-boot.version} pom import + + + org.springframework.boot + spring-boot-starter-web + + + + + org.springframework.cloud + spring-cloud-dependencies + Hoxton.SR3 + pom + import - - - - - - - com.netflix.archaius archaius-core -- GitLab