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");
+ }));
+ }
+
}