diff --git a/spring-cloud-alibaba-dependencies/pom.xml b/spring-cloud-alibaba-dependencies/pom.xml index e385d561..222576d8 100644 --- a/spring-cloud-alibaba-dependencies/pom.xml +++ b/spring-cloud-alibaba-dependencies/pom.xml @@ -19,7 +19,7 @@ 2.2.2-SNAPSHOT - 1.7.2 + 1.8.0 3.1.0 1.3.0 1.3.2 diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java index 901cde9e..747b614e 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/scg/SentinelSCGAutoConfiguration.java @@ -91,7 +91,7 @@ public class SentinelSCGAutoConfiguration { } private void initAppType() { - System.setProperty(SentinelConfig.APP_TYPE, ConfigConstants.APP_TYPE_SCG_GATEWAY); + System.setProperty(SentinelConfig.APP_TYPE_PROP_KEY, ConfigConstants.APP_TYPE_SCG_GATEWAY); } private void initFallback() { diff --git a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java index 3fa5a7e6..a7b7fcf3 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-alibaba-sentinel-gateway/src/main/java/com/alibaba/cloud/sentinel/gateway/zuul/SentinelZuulAutoConfiguration.java @@ -65,7 +65,7 @@ public class SentinelZuulAutoConfiguration { private void init() { requestOriginParserOptional .ifPresent(ZuulGatewayCallbackManager::setOriginParser); - System.setProperty(SentinelConfig.APP_TYPE, + System.setProperty(SentinelConfig.APP_TYPE_PROP_KEY, String.valueOf(ConfigConstants.APP_TYPE_ZUUL_GATEWAY)); } diff --git a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java index 5d2ed989..4e640e7a 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java +++ b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/ReactiveSentinelCircuitBreakerIntegrationTest.java @@ -82,7 +82,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { Thread.sleep(1000); } - // Recovered. + // Half-open recovery (will re-open the circuit breaker). StepVerifier.create(service.slow()).expectNext("slow").verifyComplete(); StepVerifier.create(service.normalFlux()).expectNext("normalflux") @@ -99,7 +99,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { Thread.sleep(1000); } - // Recovered. + // Half-open recovery (will re-open the circuit breaker). StepVerifier.create(service.slowFlux()).expectNext("slowflux").verifyComplete(); } @@ -110,7 +110,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { @GetMapping("/slow") public Mono slow() { - return Mono.just("slow").delayElement(Duration.ofMillis(500)); + return Mono.just("slow").delayElement(Duration.ofMillis(80)); } @GetMapping("/normal") @@ -120,7 +120,7 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { @GetMapping("/slow_flux") public Flux slowFlux() { - return Flux.just("slow", "flux").delayElements(Duration.ofMillis(500)); + return Flux.just("slow", "flux").delayElements(Duration.ofMillis(80)); } @GetMapping("normal_flux") @@ -133,19 +133,19 @@ public class ReactiveSentinelCircuitBreakerIntegrationTest { return factory -> { factory.configure(builder -> builder .rules(Collections.singletonList(new DegradeRule("slow_mono") - .setGrade(RuleConstant.DEGRADE_GRADE_RT).setCount(100) - .setTimeWindow(5))), + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).setTimeWindow(5))), "slow_mono"); factory.configure(builder -> builder - .rules(Collections.singletonList(new DegradeRule("slow_flux") - .setGrade(RuleConstant.DEGRADE_GRADE_RT).setCount(100) - .setTimeWindow(5))), + .rules(Collections.singletonList(new DegradeRule("slow_mono") + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).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))) + .setCount(5).setTimeWindow(10))) .build()); }; } diff --git a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java index d63abfb5..ebe0d6d5 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java +++ b/spring-cloud-alibaba-starters/spring-cloud-circuitbreaker-sentinel/src/test/java/com/alibaba/cloud/circuitbreaker/sentinel/SentinelCircuitBreakerIntegrationTest.java @@ -39,6 +39,7 @@ import org.springframework.stereotype.Service; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import static org.assertj.core.api.Assertions.assertThat; @@ -59,21 +60,24 @@ public class SentinelCircuitBreakerIntegrationTest { @Test public void testSlow() throws Exception { - // The first 5 requests should pass. - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); - assertThat(service.slow()).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(false)).isEqualTo("slow"); + assertThat(service.slow(false)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); // Then in the next 10s, the fallback method should be called. - for (int i = 0; i < 10; i++) { - assertThat(service.slow()).isEqualTo("fallback"); + for (int i = 0; i < 5; i++) { + assertThat(service.slow(true)).isEqualTo("fallback"); Thread.sleep(1000); } + // Try a normal request. + assertThat(service.slow(false)).isEqualTo("slow"); // Recovered. - assertThat(service.slow()).isEqualTo("slow"); + assertThat(service.slow(true)).isEqualTo("slow"); } @Test @@ -97,8 +101,10 @@ public class SentinelCircuitBreakerIntegrationTest { protected static class Application { @GetMapping("/slow") - public String slow() throws InterruptedException { - Thread.sleep(500); + public String slow(@RequestParam(required = false) Boolean slow) throws InterruptedException { + if (slow == null || slow) { + Thread.sleep(80); + } return "slow"; } @@ -112,14 +118,15 @@ public class SentinelCircuitBreakerIntegrationTest { String slowId = "slow"; List rules = Collections.singletonList( new DegradeRule(slowId).setGrade(RuleConstant.DEGRADE_GRADE_RT) - .setCount(100).setTimeWindow(10)); + .setCount(50).setSlowRatioThreshold(0.7).setMinRequestAmount(5) + .setStatIntervalMs(30000).setTimeWindow(5)); return factory -> { factory.configure(builder -> builder.rules(rules), slowId); factory.configureDefault(id -> new SentinelConfigBuilder() .resourceName(id) .rules(Collections.singletonList(new DegradeRule(id) .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT) - .setCount(0.5).setTimeWindow(10))) + .setCount(10).setStatIntervalMs(10000).setTimeWindow(10))) .build()); }; } @@ -137,9 +144,9 @@ public class SentinelCircuitBreakerIntegrationTest { this.cbFactory = cbFactory; } - public String slow() { + public String slow(boolean slow) { return cbFactory.create("slow").run( - () -> rest.getForObject("/slow", String.class), t -> "fallback"); + () -> rest.getForObject("/slow?slow=" + slow, String.class), t -> "fallback"); } public String normal() { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java index b71d9483..5d80b735 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/main/java/com/alibaba/cloud/sentinel/custom/SentinelAutoConfiguration.java @@ -31,7 +31,6 @@ import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.param.ParamFlowRule; import com.alibaba.csp.sentinel.slots.system.SystemRule; import com.alibaba.csp.sentinel.transport.config.TransportConfig; -import com.alibaba.csp.sentinel.util.AppNameUtil; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; @@ -79,9 +78,9 @@ public class SentinelAutoConfiguration { System.setProperty(LogBase.LOG_NAME_USE_PID, String.valueOf(properties.getLog().isSwitchPid())); } - if (StringUtils.isEmpty(System.getProperty(AppNameUtil.APP_NAME)) + if (StringUtils.isEmpty(System.getProperty(SentinelConfig.APP_NAME_PROP_KEY)) && StringUtils.hasText(projectName)) { - System.setProperty(AppNameUtil.APP_NAME, projectName); + System.setProperty(SentinelConfig.APP_NAME_PROP_KEY, projectName); } if (StringUtils.isEmpty(System.getProperty(TransportConfig.SERVER_PORT)) && StringUtils.hasText(properties.getTransport().getPort())) { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java index 9406f56d..56c5bf6b 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-alibaba-sentinel/src/test/java/com/alibaba/cloud/sentinel/SentinelAutoConfigurationTests.java @@ -28,8 +28,6 @@ import com.alibaba.csp.sentinel.config.SentinelConfig; import com.alibaba.csp.sentinel.log.LogBase; import com.alibaba.csp.sentinel.slots.block.BlockException; import com.alibaba.csp.sentinel.slots.block.RuleConstant; -import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRule; -import com.alibaba.csp.sentinel.slots.block.degrade.DegradeRuleManager; import com.alibaba.csp.sentinel.slots.block.flow.FlowRule; import com.alibaba.csp.sentinel.slots.block.flow.FlowRuleManager; import com.alibaba.csp.sentinel.transport.config.TransportConfig; @@ -116,13 +114,6 @@ public class SentinelAutoConfigurationTests { rule.setControlBehavior(RuleConstant.CONTROL_BEHAVIOR_DEFAULT); rule.setStrategy(RuleConstant.STRATEGY_DIRECT); FlowRuleManager.loadRules(Arrays.asList(rule)); - - DegradeRule degradeRule = new DegradeRule(); - degradeRule.setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT); - degradeRule.setResource("GET:" + degradeUrl); - degradeRule.setCount(0); - degradeRule.setTimeWindow(60); - DegradeRuleManager.loadRules(Arrays.asList(degradeRule)); } @Test @@ -208,7 +199,7 @@ public class SentinelAutoConfigurationTests { } @Test - public void testFlowRestTemplate() { + public void testRestTemplateBlockHandler() { assertThat(restTemplate.getInterceptors().size()).isEqualTo(2); assertThat(restTemplateWithBlockClass.getInterceptors().size()).isEqualTo(1); @@ -236,15 +227,6 @@ public class SentinelAutoConfigurationTests { }).isInstanceOf(RestClientException.class); } - @Test - public void testFallbackRestTemplate() { - ResponseEntity responseEntity = restTemplateWithFallbackClass - .getForEntity(degradeUrl, String.class); - - assertThat(responseEntity.getBody()).isEqualTo("Oops fallback"); - assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); - } - @Configuration static class SentinelTestConfiguration { diff --git a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/DubboCloudConstants.java b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/DubboCloudConstants.java index bba5c1ad..ccbcf22c 100644 --- a/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/DubboCloudConstants.java +++ b/spring-cloud-alibaba-starters/spring-cloud-starter-dubbo/src/main/java/com/alibaba/cloud/dubbo/util/DubboCloudConstants.java @@ -1,12 +1,11 @@ /* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You 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 + * Copyright 2013-2018 the original author or authors. * - * http://www.apache.org/licenses/LICENSE-2.0 + * 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, @@ -14,19 +13,24 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package com.alibaba.cloud.dubbo.util; /** - * The constants for Dubbo Spring Cloud + * The constants for Dubbo Spring Cloud. * * @author Mercy */ -public interface DubboCloudConstants { +public final class DubboCloudConstants { + + private DubboCloudConstants() { + throw new AssertionError("Must not instantiate constant utility class"); + } /** - * The property prefix of Configuration + * The property prefix of Configuration. */ - String CONFIG_PROPERTY_PREFIX = "dubbo.cloud"; + public static final String CONFIG_PROPERTY_PREFIX = "dubbo.cloud"; /** * The property name of Registry type