From 57e3059d8ddf014e5d02ab65fd69b3a0bbc68972 Mon Sep 17 00:00:00 2001 From: fangjian0423 Date: Thu, 30 Jan 2020 02:17:36 +0800 Subject: [PATCH] update examples --- .../pom.xml | 5 ++ .../scripts/{openfeign.sh => error.sh} | 2 +- .../scripts/feign-defaultmethod-error.sh | 7 ++ .../scripts/feign-error.sh | 7 ++ .../scripts/index.sh | 7 ++ .../scripts/sleep.sh | 7 ++ .../examples/ConsumerSCLBApplication.java | 90 ++++++++++++++++++- .../alibaba/cloud/examples/UrlCleaner.java | 30 +++++++ .../src/main/resources/application.properties | 13 +++ .../src/main/resources/degraderule.json | 26 ++++++ .../src/main/resources/flowrule.json | 10 +++ .../seata-example/account-service/pom.xml | 4 + .../src/main/resources/application.properties | 1 + .../seata-example/business-service/pom.xml | 8 ++ .../cloud/examples/BusinessApplication.java | 15 ++-- .../src/main/resources/application.properties | 3 + .../seata-example/order-service/pom.xml | 4 + .../src/main/resources/application.properties | 1 + .../seata-example/storage-service/pom.xml | 4 + .../src/main/resources/application.properties | 1 + .../cloud/examples/TestController.java | 6 +- .../cloud/examples/MyConfiguration.java | 26 ++++++ .../examples/SentinelWebFluxController.java | 28 ++++++ 23 files changed, 294 insertions(+), 11 deletions(-) rename spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/{openfeign.sh => error.sh} (50%) create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json create mode 100644 spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml index dc211efe..23f07064 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/pom.xml @@ -41,6 +41,11 @@ spring-cloud-starter-loadbalancer + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + org.springframework.cloud spring-cloud-starter-openfeign diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh similarity index 50% rename from spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh rename to spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh index 975d060d..5602a98d 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/openfeign.sh +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/error.sh @@ -2,6 +2,6 @@ n=1 while [ $n -le 10 ] do - echo `curl -s http://localhost:18083/echo-feign/openfeign` + echo `curl -s http://localhost:18083/test` let n++ done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh new file mode 100644 index 00000000..6efb8368 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-defaultmethod-error.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/divide-feign2?a=1` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh new file mode 100644 index 00000000..09db2477 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/feign-error.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/divide-feign?a=1\&b=0` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh new file mode 100644 index 00000000..7db176b8 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/index.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/index` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh new file mode 100644 index 00000000..423c3d15 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/scripts/sleep.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +n=1 +while [ $n -le 10 ] +do + echo `curl -s http://localhost:18083/sleep` + let n++ +done diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java index d60b2134..9cb57f9b 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/ConsumerSCLBApplication.java @@ -19,6 +19,8 @@ package com.alibaba.cloud.examples; import java.util.List; import java.util.Random; +import com.alibaba.cloud.examples.ConsumerSCLBApplication.EchoService; +import com.alibaba.cloud.sentinel.annotation.SentinelRestTemplate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import reactor.core.publisher.Mono; @@ -28,6 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.ServiceInstance; +import org.springframework.cloud.client.discovery.DiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.cloud.client.loadbalancer.reactive.DefaultResponse; @@ -58,10 +61,18 @@ public class ConsumerSCLBApplication { @LoadBalanced @Bean + @SentinelRestTemplate(urlCleanerClass = UrlCleaner.class, urlCleaner = "clean") public RestTemplate restTemplate() { return new RestTemplate(); } + @LoadBalanced + @Bean + @SentinelRestTemplate + public RestTemplate restTemplate1() { + return new RestTemplate(); + } + public static void main(String[] args) { SpringApplication.run(ConsumerSCLBApplication.class, args); } @@ -112,7 +123,8 @@ public class ConsumerSCLBApplication { } - @FeignClient(name = "service-provider") + @FeignClient(name = "service-provider", fallback = EchoServiceFallback.class, + configuration = FeignConfiguration.class) public interface EchoService { @GetMapping("/echo/{str}") @@ -136,9 +148,15 @@ public class ConsumerSCLBApplication { @Autowired private RestTemplate restTemplate; + @Autowired + private RestTemplate restTemplate1; + @Autowired private EchoService echoService; + @Autowired + private DiscoveryClient discoveryClient; + @GetMapping("/echo-rest/{str}") public String rest(@PathVariable String str) { return restTemplate.getForObject("http://service-provider/echo/" + str, @@ -150,6 +168,76 @@ public class ConsumerSCLBApplication { return echoService.echo(str); } + @GetMapping("/index") + public String index() { + return restTemplate1.getForObject("http://service-provider", String.class); + } + + @GetMapping("/test") + public String test() { + return restTemplate1.getForObject("http://service-provider/test", + String.class); + } + + @GetMapping("/sleep") + public String sleep() { + return restTemplate1.getForObject("http://service-provider/sleep", + String.class); + } + + @GetMapping("/notFound-feign") + public String notFound() { + return echoService.notFound(); + } + + @GetMapping("/divide-feign") + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return echoService.divide(a, b); + } + + @GetMapping("/divide-feign2") + public String divide(@RequestParam Integer a) { + return echoService.divide(a); + } + + @GetMapping("/services/{service}") + public Object client(@PathVariable String service) { + return discoveryClient.getInstances(service); + } + + @GetMapping("/services") + public Object services() { + return discoveryClient.getServices(); + } + + } + +} + +class FeignConfiguration { + + @Bean + public EchoServiceFallback echoServiceFallback() { + return new EchoServiceFallback(); + } + +} + +class EchoServiceFallback implements EchoService { + + @Override + public String echo(@PathVariable("str") String str) { + return "echo fallback"; + } + + @Override + public String divide(@RequestParam Integer a, @RequestParam Integer b) { + return "divide fallback"; + } + + @Override + public String notFound() { + return "notFound fallback"; } } diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java new file mode 100644 index 00000000..e0c691af --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/java/com/alibaba/cloud/examples/UrlCleaner.java @@ -0,0 +1,30 @@ +/* + * Copyright 2013-2018 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.alibaba.cloud.examples; + +public class UrlCleaner { + + public static String clean(String url) { + System.out.println("enter urlCleaner"); + if (url.matches(".*/echo/.*")) { + System.out.println("change url"); + url = url.replaceAll("/echo/.*", "/echo/{str}"); + } + return url; + } + +} diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties index 40c2b2f5..47822c34 100644 --- a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/application.properties @@ -4,3 +4,16 @@ management.endpoints.web.exposure.include=* spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.loadbalancer.ribbon.enabled=false + +feign.sentinel.enabled=true + +spring.cloud.sentinel.transport.dashboard=localhost:8080 +spring.cloud.sentinel.eager=true + +spring.cloud.sentinel.datasource.ds1.file.file=classpath: flowrule.json +spring.cloud.sentinel.datasource.ds1.file.data-type=json +spring.cloud.sentinel.datasource.ds1.file.rule-type=flow + +spring.cloud.sentinel.datasource.ds2.file.file=classpath: degraderule.json +spring.cloud.sentinel.datasource.ds2.file.data-type=json +spring.cloud.sentinel.datasource.ds2.file.rule-type=degrade diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json new file mode 100644 index 00000000..75e9d3b3 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/degraderule.json @@ -0,0 +1,26 @@ +[ + { + "resource": "GET:http://service-provider/test", + "count": 0.5, + "grade": 1, + "timeWindow": 30 + }, + { + "resource": "GET:http://service-provider", + "count": 0.5, + "grade": 1, + "timeWindow": 10 + }, + { + "resource": "GET:http://service-provider/sleep", + "count": 20.0, + "grade": 0, + "timeWindow": 30 + }, + { + "resource": "GET:http://service-provider/divide", + "count": 0.5, + "grade": 1, + "timeWindow": 30 + } +] \ No newline at end of file diff --git a/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json new file mode 100644 index 00000000..5260bbe6 --- /dev/null +++ b/spring-cloud-alibaba-examples/nacos-example/nacos-discovery-example/nacos-discovery-consumer-sclb-example/src/main/resources/flowrule.json @@ -0,0 +1,10 @@ +[ + { + "resource": "GET:http://service-provider/echo/{str}", + "controlBehavior": 0, + "count": 2, + "grade": 1, + "limitApp": "default", + "strategy": 0 + } +] diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml index 00bfe262..4c3ed5de 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/account-service/pom.xml @@ -16,6 +16,10 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties index 29ac8d05..3362a705 100644 --- a/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/account-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=account-service server.port=18084 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="accountDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml index bd58fe41..8f0ce5d4 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/business-service/pom.xml @@ -16,6 +16,10 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.cloud spring-cloud-starter-openfeign @@ -24,6 +28,10 @@ org.springframework.cloud spring-cloud-starter-netflix-hystrix + + org.springframework.cloud + spring-cloud-starter-loadbalancer + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java index b130d13d..e708c009 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/java/com/alibaba/cloud/examples/BusinessApplication.java @@ -18,11 +18,13 @@ package com.alibaba.cloud.examples; 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.cloud.openfeign.FeignClient; import org.springframework.context.annotation.Bean; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.client.RestTemplate; @@ -31,6 +33,7 @@ import org.springframework.web.client.RestTemplate; */ @SpringBootApplication @EnableFeignClients +@EnableDiscoveryClient(autoRegister = false) public class BusinessApplication { public static void main(String[] args) { @@ -42,16 +45,16 @@ public class BusinessApplication { return new RestTemplate(); } - @FeignClient(value = "storage", url = "http://127.0.0.1:18082") + @FeignClient("storage-service") public interface StorageService { - @RequestMapping(path = "/storage/{commodityCode}/{count}") - String storage(@RequestParam("commodityCode") String commodityCode, - @RequestParam("count") int count); + @GetMapping(path = "/storage/{commodityCode}/{count}") + String storage(@PathVariable("commodityCode") String commodityCode, + @PathVariable("count") int count); } - @FeignClient(value = "order", url = "http://127.0.0.1:18083") + @FeignClient("order-service") public interface OrderService { @PostMapping(path = "/order") diff --git a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties index f5c0cdb9..5bb78b60 100644 --- a/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/business-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ server.port=18081 spring.application.name=business-service +spring.cloud.nacos.discovery.server-addr=localhost:8848 # The following configuration can be omitted. #feign.hystrix.enabled=true @@ -12,6 +13,8 @@ seata.service.vgroup-mapping=default seata.service.grouplist=127.0.0.1:8091 seata.service.disable-global-transaction=false +spring.cloud.loadbalancer.ribbon.enabled=true + ## if use registry center #seata.registry.type=nacos #seata.registry.nacos.cluster=default diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml index 65cbc0c0..b67385e7 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/order-service/pom.xml @@ -12,6 +12,10 @@ order-service + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + com.alibaba.cloud spring-cloud-starter-alibaba-seata diff --git a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties index ada9995b..31248d2e 100644 --- a/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/order-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=order-service server.port=18083 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="orderDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml index b5c3f3bb..06bc9108 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/pom.xml @@ -16,6 +16,10 @@ com.alibaba.cloud spring-cloud-starter-alibaba-seata + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + org.springframework.boot spring-boot-starter-web diff --git a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties index 49b36889..3372daec 100644 --- a/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties +++ b/spring-cloud-alibaba-examples/seata-example/storage-service/src/main/resources/application.properties @@ -1,5 +1,6 @@ spring.application.name=storage-service server.port=18082 +spring.cloud.nacos.discovery.server-addr=localhost:8848 spring.datasource.name="storageDataSource" spring.datasource.type=com.alibaba.druid.pool.DruidDataSource diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java index ffacf273..5ca27cd1 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-core-example/src/main/java/com/alibaba/cloud/examples/TestController.java @@ -60,14 +60,14 @@ public class TestController { @GetMapping("/slow") public String slow() { - return circuitBreakerFactory.create("show").run(() -> { + return circuitBreakerFactory.create("slow").run(() -> { try { - Thread.sleep(1000L); + Thread.sleep(500L); } catch (InterruptedException e) { e.printStackTrace(); } - return "success"; + return "slow"; }, throwable -> "fallback"); } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java index dd8df034..adce4819 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/MyConfiguration.java @@ -16,9 +16,16 @@ package com.alibaba.cloud.examples; +import java.util.Collections; + +import com.alibaba.cloud.circuitbreaker.sentinel.ReactiveSentinelCircuitBreakerFactory; +import com.alibaba.cloud.circuitbreaker.sentinel.SentinelConfigBuilder; import com.alibaba.csp.sentinel.adapter.spring.webflux.callback.BlockRequestHandler; +import com.alibaba.csp.sentinel.slots.block.RuleConstant; +import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; import reactor.core.publisher.Mono; +import org.springframework.cloud.client.circuitbreaker.Customizer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.HttpStatus; @@ -46,4 +53,23 @@ public class MyConfiguration { }; } + @Bean + public Customizer slowCustomizer() { + return factory -> { + factory.configure(builder -> builder.rules(Collections.singletonList( + new DegradeRule("slow_mono").setGrade(RuleConstant.DEGRADE_GRADE_RT) + .setCount(100).setTimeWindow(5))), + "slow_mono"); + factory.configure(builder -> builder.rules(Collections.singletonList( + new DegradeRule("slow_flux").setGrade(RuleConstant.DEGRADE_GRADE_RT) + .setCount(100).setTimeWindow(5))), + "slow_flux"); + factory.configureDefault(id -> new SentinelConfigBuilder().resourceName(id) + .rules(Collections.singletonList(new DegradeRule(id) + .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) + .setCount(0.5).setTimeWindow(10))) + .build()); + }; + } + } diff --git a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java index 5bf96332..d0b45891 100644 --- a/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java +++ b/spring-cloud-alibaba-examples/sentinel-example/sentinel-webflux-example/src/main/java/com/alibaba/cloud/examples/SentinelWebFluxController.java @@ -20,8 +20,11 @@ import com.alibaba.csp.sentinel.adapter.reactor.SentinelReactorTransformer; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.client.circuitbreaker.ReactiveCircuitBreakerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.reactive.function.client.WebClient; /** * @author Jim @@ -29,6 +32,9 @@ import org.springframework.web.bind.annotation.RestController; @RestController public class SentinelWebFluxController { + @Autowired + private ReactiveCircuitBreakerFactory circuitBreakerFactory; + @GetMapping("/mono") public Mono mono() { return Mono.just("simple string") @@ -50,4 +56,26 @@ public class SentinelWebFluxController { .transform(new SentinelReactorTransformer<>("flux")); } + @GetMapping("/cbSlow") + public Mono cbSlow() { + int delaySecs = 2; + return WebClient.builder().baseUrl("http://httpbin.org/").build().get() + .uri("/delay/" + delaySecs).retrieve().bodyToMono(String.class) + .transform(it -> circuitBreakerFactory.create("slow_mono").run(it, t -> { + t.printStackTrace(); + return Mono.just("fallback"); + })); + } + + @GetMapping("/cbError") + public Mono cbError() { + String code = "500"; + return WebClient.builder().baseUrl("http://httpbin.org/").build().get() + .uri("/status/" + code).retrieve().bodyToMono(String.class) + .transform(it -> circuitBreakerFactory.create("cbError").run(it, t -> { + t.printStackTrace(); + return Mono.just("fallback"); + })); + } + }