diff --git a/.gitignore b/.gitignore index 1df5423129c113c047c3f80363560c31c9c83c2a..d946272376825e7018b1a5e2c2b3dee852dbbfe5 100644 --- a/.gitignore +++ b/.gitignore @@ -135,4 +135,8 @@ cloud-stream-consumer-rabbitmq8802/target/ cloud-stream-consumer-rabbitmq8803/target/ cloudalibaba-config-nacos-client3377/target/ cloudalibaba-provider-nacos-payment9001/target/ -cloudalibaba-provider-nacos-payment9002/target/ \ No newline at end of file +cloudalibaba-provider-nacos-payment9002/target/ +cloudalibaba-provider-nacos-payment9003/target/ +cloudalibaba-provider-nacos-payment9004/target/ +cloudalibaba-sentinel-service8401/target/ +cloudalibaba-consumer-nacos-order84/target/ \ No newline at end of file diff --git a/cloudalibaba-consumer-nacos-order84/pom.xml b/cloudalibaba-consumer-nacos-order84/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..014f379d8e1dcc739e663669deb605b4932fc8e1 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/pom.xml @@ -0,0 +1,70 @@ + + + + 2020SpringCloud + com.lcry + 1.0-SNAPSHOT + + 4.0.0 + + + cloudalibaba-consumer-nacos-order84 + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + com.alibaba.csp + sentinel-datasource-nacos + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + com.lcry + cloud-api-commons + ${project.version} + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + \ No newline at end of file diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/NacosOrderMain84.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/NacosOrderMain84.java new file mode 100644 index 0000000000000000000000000000000000000000..1b1d0c44e6133c1566004acd89e4c3b29d9c8115 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/NacosOrderMain84.java @@ -0,0 +1,21 @@ +package com.lcry.springcloudalibaba; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; +import org.springframework.cloud.openfeign.EnableFeignClients; + +/** + * NacosOrderMain84 + * + * @author lcry + * @date 2020/03/17 16:16 + */ +@EnableDiscoveryClient +@SpringBootApplication +@EnableFeignClients //整合feign +public class NacosOrderMain84 { + public static void main(String[] args) { + SpringApplication.run(NacosOrderMain84.class, args); + } +} diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/config/ApplicationContextConfig.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/config/ApplicationContextConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..0e5d52a8e64dc241422d37eee94eeb3e6050db63 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/config/ApplicationContextConfig.java @@ -0,0 +1,20 @@ +package com.lcry.springcloudalibaba.config; + +import org.springframework.cloud.client.loadbalancer.LoadBalanced; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +/** + * 配置RestTemplate + */ +@Configuration +public class ApplicationContextConfig +{ + @Bean + @LoadBalanced + public RestTemplate getRestTemplate() + { + return new RestTemplate(); + } +} diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/controller/CircleBreakerController.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/controller/CircleBreakerController.java new file mode 100644 index 0000000000000000000000000000000000000000..2cb4b5c95f9dbf93526b08d7ded9750993ee57ff --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/controller/CircleBreakerController.java @@ -0,0 +1,91 @@ +package com.lcry.springcloudalibaba.controller; + +import com.alibaba.csp.sentinel.annotation.SentinelResource; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import com.lcry.springcloudalibaba.myhandler.CustomerBlockHandler; +import com.lcry.springcloudalibaba.service.PaymentService; +import lombok.extern.slf4j.Slf4j; +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 org.springframework.web.client.RestTemplate; + +import javax.annotation.Resource; + +/** + * CircleBreakerController + * + * @author lcry + * @date 2020/03/17 16:18 + * 使用示例: + */ +@RestController +@Slf4j +public class CircleBreakerController { + public static final String SERVICE_URL = "http://nacos-payment-provider"; + + // 整个rabbin - restTemplate + @Resource + private RestTemplate restTemplate; + + // 整合sentinel + @RequestMapping("/consumer/fallback/{id}") + //@SentinelResource(value = "fallback") //没有配置 + //@SentinelResource(value = "fallback",fallback = "handlerFallback") //fallback只负责业务异常 + //@SentinelResource(value = "fallback",blockHandler = "blockHandler") //blockHandler只负责sentinel控制台配置违规 +// @SentinelResource(value = "fallback",fallback = "handlerFallback",blockHandler = "blockHandler", //分开自定义 +// exceptionsToIgnore = {IllegalArgumentException.class}//排除异常不限流 +// ) + @SentinelResource(value = "fallback", //,fallback = "handlerFallback", + blockHandlerClass = CustomerBlockHandler.class, //异常自定义 + blockHandler = "handlerException1" //分开自定义 + ) + public CommonResult fallback(@PathVariable Long id) { + CommonResult result = restTemplate.getForObject(SERVICE_URL + "/paymentSQL/" + id, CommonResult.class, id); + + if (id == 4) { + throw new IllegalArgumentException("IllegalArgumentException,非法参数异常...."); + } else if (result.getData() == null) { + throw new NullPointerException("NullPointerException,该ID没有对应记录,空指针异常"); + } + + return result; + } + + //本例是fallback + public CommonResult handlerFallback(@PathVariable Long id, Throwable e) { + Payment payment = new Payment(id, "null"); + return new CommonResult<>(444, "兜底异常handlerFallback,exception内容 " + e.getMessage(), payment); + } + + //本例是blockHandler + public CommonResult blockHandler(@PathVariable Long id, BlockException blockException) { + Payment payment = new Payment(id, "null"); + return new CommonResult<>(445, "blockHandler-sentinel限流,无此流水: blockException " + blockException.getMessage(), payment); + } + + //OpenFeign调用 + @Resource + private PaymentService paymentService; + + @GetMapping(value = "/consumer/paymentSQL/{id}") + public CommonResult paymentSQL(@PathVariable("id") Long id) { + return paymentService.paymentSQL(id); + } + + + /* + 测试自定义限流 + */ + @GetMapping(value = "/consumer/paymentSQL") + @SentinelResource(value = "customerBlockHandler", //资源名称 + blockHandlerClass = CustomerBlockHandler.class, //异常自定义 + blockHandler = "handlerException1") //调用自定义类某个方法 + public CommonResult paymentSQL2() { + return paymentService.paymentSQL(1L); + } +} + diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..150b4d8943d8facb92500ba04781d99c3ca27c9d --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java @@ -0,0 +1,19 @@ +package com.lcry.springcloudalibaba.myhandler; + +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.lcry.springcloud.entities.CommonResult; + +/** + * @author lcry + * @date 2020/03/17 14:51 + * 用户自定义处理异常类 + */ +public class CustomerBlockHandler { + public static CommonResult handlerException1(BlockException exception) { + return new CommonResult(4444, "按客戶自定义,global handlerException----1"); + } + + public static CommonResult handlerException2(BlockException exception) { + return new CommonResult(4444, "按客戶自定义,global handlerException----2"); + } +} diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentFallbackService.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentFallbackService.java new file mode 100644 index 0000000000000000000000000000000000000000..cced8abea788db9c3f5a8c5a09438fa21cd2da89 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentFallbackService.java @@ -0,0 +1,18 @@ +package com.lcry.springcloudalibaba.service; + +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import org.springframework.stereotype.Component; + +/** + * @author lcry + * @date 2020/03/17 15:59 + * Openfeign降级调用本方法 + */ +@Component +public class PaymentFallbackService implements PaymentService { + @Override + public CommonResult paymentSQL(Long id) { + return new CommonResult<>(44444, "服务降级返回,---PaymentFallbackService", new Payment(id, "errorSerial")); + } +} diff --git a/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentService.java b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentService.java new file mode 100644 index 0000000000000000000000000000000000000000..57800d4204defa331dc3e3d3501fa4ead5238664 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/java/com/lcry/springcloudalibaba/service/PaymentService.java @@ -0,0 +1,21 @@ +package com.lcry.springcloudalibaba.service; + + +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +/** + * @author lcry + * @date 2020/03/17 15:59 + */ +//openfeign调用nacos-payment-provider服务 +@FeignClient(value = "nacos-payment-provider", +// 降级处理的方法 + fallback = PaymentFallbackService.class) +public interface PaymentService { + @GetMapping(value = "/paymentSQL/{id}") + public CommonResult paymentSQL(@PathVariable("id") Long id); +} diff --git a/cloudalibaba-consumer-nacos-order84/src/main/resources/application.yml b/cloudalibaba-consumer-nacos-order84/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..71f0e7b7250c1a3e4fe52abaa244881b74083211 --- /dev/null +++ b/cloudalibaba-consumer-nacos-order84/src/main/resources/application.yml @@ -0,0 +1,46 @@ +server: + port: 84 + +spring: + application: + name: nacos-order-consumer + cloud: + nacos: + discovery: + server-addr: localhost:8848 + sentinel: + transport: + #配置Sentinel dashboard地址 + dashboard: localhost:8080 + #默认8719端口,假如被占用会自动从8719开始依次+1扫描,直至找到未被占用的端口 + port: 8719 + #sentinel持久化配置 + datasource: + ds1: + nacos: + server-addr: localhost:8848 + dataId: ${spring.application.name} #nacos-order-consumer + groupId: DEFAULT_GROUP + data-type: json + rule-type: flow +# 持久化nacos需要写入下面配置内容 +# [ +# { +# "resource": "/hello", //资源名称 +# "limitApp": "default", //限流应用名称 +# "grade": 1, +# "count": 5, +# "strategy": 0, +# "controlBehavior": 0, +# "clusterMode": false //单台模式 +# } +# ] + +#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者) +service-url: + nacos-user-service: http://nacos-payment-provider + +# 激活Sentinel对Feign的支持 +feign: + sentinel: + enabled: true \ No newline at end of file diff --git a/cloudalibaba-provider-nacos-payment9003/pom.xml b/cloudalibaba-provider-nacos-payment9003/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..714ea5562c06c33ac61cb48c38f2cedddf1159e3 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9003/pom.xml @@ -0,0 +1,58 @@ + + + + 2020SpringCloud + com.lcry + 1.0-SNAPSHOT + + 4.0.0 + + + cloudalibaba-provider-nacos-payment9003 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.boot + spring-boot-starter-web + + + + com.lcry + cloud-api-commons + ${project.version} + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + org.springframework.cloud + spring-cloud-openfeign-core + + + \ No newline at end of file diff --git a/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9003.java b/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9003.java new file mode 100644 index 0000000000000000000000000000000000000000..bb5dbe64b78f24750a8c60ca5dc5b94b695e4dc2 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9003.java @@ -0,0 +1,20 @@ +package com.lcry.springcloudalibaba; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * NacosPaymentMain9003 + * + * @author lcry + * @date 2020/03/17 15:58 + */ +@EnableDiscoveryClient +@SpringBootApplication +public class NacosPaymentMain9003 { + public static void main(String[] args) { + SpringApplication.run(NacosPaymentMain9003.class, args); + } + +} diff --git a/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java b/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java new file mode 100644 index 0000000000000000000000000000000000000000..6b6879fce711c8b2fb218f6b14eb77c2a1ac3d00 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9003/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java @@ -0,0 +1,38 @@ +package com.lcry.springcloudalibaba.controller; + +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + * PaymentController + * + * @author lcry + * @date 2020/03/17 15:59 + * 服务方模拟查询数据库 + */ +@RestController +public class PaymentController { + @Value("${server.port}") + private String serverPort; + + public static HashMap hashMap = new HashMap<>(); + + static { + hashMap.put(1L, new Payment(1L, "28a8c1e3bc2742d8848569891fb42181")); + hashMap.put(2L, new Payment(2L, "bba8c1e3bc2742d8848569891ac32182")); + hashMap.put(3L, new Payment(3L, "6ua8c1e3bc2742d8848569891xt92183")); + } + + @GetMapping(value = "/paymentSQL/{id}") + public CommonResult paymentSQL(@PathVariable("id") Long id) { + Payment payment = hashMap.get(id); + CommonResult result = new CommonResult(200, "from mysql,serverPort: " + serverPort, payment); + return result; + } +} diff --git a/cloudalibaba-provider-nacos-payment9003/src/main/resources/application.yml b/cloudalibaba-provider-nacos-payment9003/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..775849af9c39e6868834d1088be222a4c0a6ca49 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9003/src/main/resources/application.yml @@ -0,0 +1,16 @@ +server: + port: 9003 + +spring: + application: + name: nacos-payment-provider + cloud: + nacos: + discovery: + server-addr: localhost:8848 #配置Nacos地址 + +management: + endpoints: + web: + exposure: + include: '*' \ No newline at end of file diff --git a/cloudalibaba-provider-nacos-payment9004/pom.xml b/cloudalibaba-provider-nacos-payment9004/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..05ba301dabc0059a7a66c2710e9320bd2843e942 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9004/pom.xml @@ -0,0 +1,56 @@ + + + + 2020SpringCloud + com.lcry + 1.0-SNAPSHOT + + 4.0.0 + + + cloudalibaba-provider-nacos-payment9004 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + org.springframework.boot + spring-boot-starter-web + + + + com.lcry + cloud-api-commons + ${project.version} + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + \ No newline at end of file diff --git a/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9004.java b/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9004.java new file mode 100644 index 0000000000000000000000000000000000000000..370aee4bd3855e33f709fb0dfe523e3e3ebc713d --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/NacosPaymentMain9004.java @@ -0,0 +1,20 @@ +package com.lcry.springcloudalibaba; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * NacosPaymentMain9004 + * + * @author lcry + * @date 2020/03/17 15:58 + */ +@EnableDiscoveryClient +@SpringBootApplication +public class NacosPaymentMain9004 { + public static void main(String[] args) { + SpringApplication.run(NacosPaymentMain9004.class, args); + } + +} diff --git a/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java b/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java new file mode 100644 index 0000000000000000000000000000000000000000..6b6879fce711c8b2fb218f6b14eb77c2a1ac3d00 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9004/src/main/java/com/lcry/springcloudalibaba/controller/PaymentController.java @@ -0,0 +1,38 @@ +package com.lcry.springcloudalibaba.controller; + +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RestController; + +import java.util.HashMap; + +/** + * PaymentController + * + * @author lcry + * @date 2020/03/17 15:59 + * 服务方模拟查询数据库 + */ +@RestController +public class PaymentController { + @Value("${server.port}") + private String serverPort; + + public static HashMap hashMap = new HashMap<>(); + + static { + hashMap.put(1L, new Payment(1L, "28a8c1e3bc2742d8848569891fb42181")); + hashMap.put(2L, new Payment(2L, "bba8c1e3bc2742d8848569891ac32182")); + hashMap.put(3L, new Payment(3L, "6ua8c1e3bc2742d8848569891xt92183")); + } + + @GetMapping(value = "/paymentSQL/{id}") + public CommonResult paymentSQL(@PathVariable("id") Long id) { + Payment payment = hashMap.get(id); + CommonResult result = new CommonResult(200, "from mysql,serverPort: " + serverPort, payment); + return result; + } +} diff --git a/cloudalibaba-provider-nacos-payment9004/src/main/resources/application.yml b/cloudalibaba-provider-nacos-payment9004/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..079b128d746beeb0eb0b9cab282743e0d802d155 --- /dev/null +++ b/cloudalibaba-provider-nacos-payment9004/src/main/resources/application.yml @@ -0,0 +1,16 @@ +server: + port: 9004 + +spring: + application: + name: nacos-payment-provider + cloud: + nacos: + discovery: + server-addr: localhost:8848 #配置Nacos地址 + +management: + endpoints: + web: + exposure: + include: '*' \ No newline at end of file diff --git a/cloudalibaba-sentinel-service8401/pom.xml b/cloudalibaba-sentinel-service8401/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..f519a414e5eabfb58d53d87b423400f5be173e1c --- /dev/null +++ b/cloudalibaba-sentinel-service8401/pom.xml @@ -0,0 +1,76 @@ + + + + 2020SpringCloud + com.lcry + 1.0-SNAPSHOT + + 4.0.0 + + cloudalibaba-sentinel-service8401 + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + com.alibaba.csp + sentinel-datasource-nacos + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + org.springframework.cloud + spring-cloud-starter-openfeign + + + + com.lcry + cloud-api-commons + ${project.version} + + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-actuator + + + + org.springframework.boot + spring-boot-devtools + runtime + true + + + cn.hutool + hutool-all + 4.6.3 + + + org.projectlombok + lombok + true + + + org.springframework.boot + spring-boot-starter-test + test + + + + + \ No newline at end of file diff --git a/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/SentinelServiceMain8401.java b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/SentinelServiceMain8401.java new file mode 100644 index 0000000000000000000000000000000000000000..62d5e31221bec2b9a5082981debf165f0dedfbc5 --- /dev/null +++ b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/SentinelServiceMain8401.java @@ -0,0 +1,20 @@ +package com.lcry.springcloudalibaba; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.client.discovery.EnableDiscoveryClient; + +/** + * SentinelServiceMain8401 + * + * @author lcry + * @date 2020/03/17 14:51 + * 测试Sentinel限流和熔断 + */ +@EnableDiscoveryClient +@SpringBootApplication +public class SentinelServiceMain8401 { + public static void main(String[] args) { + SpringApplication.run(SentinelServiceMain8401.class, args); + } +} \ No newline at end of file diff --git a/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/FlowLimitController.java b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/FlowLimitController.java new file mode 100644 index 0000000000000000000000000000000000000000..54ffd0201b69e72dc07610b96a2d413dce0019a2 --- /dev/null +++ b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/FlowLimitController.java @@ -0,0 +1,67 @@ +package com.lcry.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.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.concurrent.TimeUnit; + +/** + * @author lcry + * @date 2020/03/17 14:51 + * 路径限流测试 + */ +@RestController +@Slf4j +public class FlowLimitController { + @GetMapping("/testA") + public String testA() { + return "------testA"; + } + + @GetMapping("/testB") + public String testB() { + log.info(Thread.currentThread().getName() + "\t" + "...testB"); + return "------testB"; + } + + + @GetMapping("/testD") + public String testD() { +// try { +// TimeUnit.SECONDS.sleep(1); +// } catch (InterruptedException e) { +// e.printStackTrace(); +// } +// log.info("testD 测试RT"); + + log.info("testD 异常比例"); + int age = 10 / 0; + return "------testD"; + } + + @GetMapping("/testE") + public String testE() { + log.info("testE 测试异常数"); + int age = 10 / 0; + return "------testE 测试异常数"; + } + + @GetMapping("/testHotKey") + @SentinelResource(value = "testHotKey", blockHandler = "deal_testHotKey") + public String testHotKey(@RequestParam(value = "p1", required = false) String p1, + @RequestParam(value = "p2", required = false) String p2) { + //int age = 10/0; + return "------testHotKey"; + } + + public String deal_testHotKey(String p1, String p2, BlockException exception) { + //sentinel系统默认的提示:Blocked by Sentinel (flow limiting) + return "------deal_testHotKey,o(╥﹏╥)o"; + + } + +} diff --git a/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/RateLimitController.java b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/RateLimitController.java new file mode 100644 index 0000000000000000000000000000000000000000..169275b60473eff09743456bca7bd4988410cccc --- /dev/null +++ b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/controller/RateLimitController.java @@ -0,0 +1,42 @@ +package com.lcry.springcloudalibaba.controller; + +import com.alibaba.csp.sentinel.annotation.SentinelResource; +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.lcry.springcloud.entities.CommonResult; +import com.lcry.springcloud.entities.Payment; +import com.lcry.springcloudalibaba.myhandler.CustomerBlockHandler; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author lcry + * @date 2020/03/17 14:51 + * 测试资源限流 + */ +@RestController +public class RateLimitController { + @GetMapping("/rateLimit/byResource") + @SentinelResource(value = "byResource", blockHandler = "handleException") + public CommonResult byResource() { + return new CommonResult(200, "按资源名称限流测试OK", new Payment(2020L, "serial001")); + } + + public CommonResult handleException(BlockException exception) { + return new CommonResult(444, exception.getClass().getCanonicalName() + "\t 服务不可用"); + } + + @GetMapping("/rateLimit/byUrl") + @SentinelResource(value = "byUrl") + public CommonResult byUrl() { + return new CommonResult(200, "按url限流测试OK", new Payment(2020L, "serial002")); + } + + + @GetMapping("/rateLimit/customerBlockHandler") + @SentinelResource(value = "customerBlockHandler", //资源名称 + blockHandlerClass = CustomerBlockHandler.class, //异常自定义 + blockHandler = "handlerException1") //调用自定义类某个方法 + public CommonResult customerBlockHandler() { + return new CommonResult(200, "按客戶自定义", new Payment(2020L, "serial003")); + } +} \ No newline at end of file diff --git a/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java new file mode 100644 index 0000000000000000000000000000000000000000..6e0187a37caf2933665a35de6d3bd7ae8cd69255 --- /dev/null +++ b/cloudalibaba-sentinel-service8401/src/main/java/com/lcry/springcloudalibaba/myhandler/CustomerBlockHandler.java @@ -0,0 +1,19 @@ +package com.lcry.springcloudalibaba.myhandler; + +import com.alibaba.csp.sentinel.slots.block.BlockException; +import com.lcry.springcloud.entities.CommonResult; + +/** + * @author lcry + * @date 2020/03/17 14:51 + * 用户自定义处理异常类 + */ +public class CustomerBlockHandler { + public static CommonResult handlerException1(BlockException exception) { + return new CommonResult(4444, "按客戶自定义,global handlerException----1"); + } + + public static CommonResult handlerException2(BlockException exception) { + return new CommonResult(4444, "按客戶自定义,global handlerException----2"); + } +} \ No newline at end of file diff --git a/cloudalibaba-sentinel-service8401/src/main/resources/application.yml b/cloudalibaba-sentinel-service8401/src/main/resources/application.yml new file mode 100644 index 0000000000000000000000000000000000000000..efe9ddd8d0b54a1687c75d54a94c91315a98c5f7 --- /dev/null +++ b/cloudalibaba-sentinel-service8401/src/main/resources/application.yml @@ -0,0 +1,33 @@ +#测试端口 +server: + port: 8401 + +spring: + application: + name: cloudalibaba-sentinel-service + cloud: + nacos: + discovery: + server-addr: localhost:8848 #Nacos服务注册中心地址 + sentinel: + transport: + dashboard: localhost:8080 #配置Sentinel dashboard地址 + port: 8719 #随机找一个地址,如果冲突就往后+1 +# datasource: +# ds1: +# nacos: +# server-addr: localhost:8848 +# dataId: cloudalibaba-sentinel-service +# groupId: DEFAULT_GROUP +# data-type: json +# rule-type: flow + +management: + endpoints: + web: + exposure: + include: '*' + +feign: + sentinel: + enabled: true # 激活Sentinel对Feign的支持 \ No newline at end of file diff --git a/pom.xml b/pom.xml index af2ab4659cffbf891f32a618dcc54edf6e0704ed..a70ca1846f344833cec2ddfad2d61aa688add1c6 100644 --- a/pom.xml +++ b/pom.xml @@ -32,6 +32,10 @@ cloudalibaba-config-nacos-client3377 cloudalibaba-provider-nacos-payment9001 cloudalibaba-provider-nacos-payment9002 + cloudalibaba-sentinel-service8401 + cloudalibaba-provider-nacos-payment9003 + cloudalibaba-provider-nacos-payment9004 + cloudalibaba-consumer-nacos-order84 pom