You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2022/04/21 11:26:12 UTC
[servicecomb-java-chassis] branch master updated: [SCB-2457] governance circuit breaker support metrics (#2793)
This is an automated email from the ASF dual-hosted git repository.
liubao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/servicecomb-java-chassis.git
The following commit(s) were added to refs/heads/master by this push:
new 787b0f113 [SCB-2457] governance circuit breaker support metrics (#2793)
787b0f113 is described below
commit 787b0f113e70286720ae905bc11e7aa86d6e3e09
Author: liubao68 <bi...@qq.com>
AuthorDate: Thu Apr 21 19:26:06 2022 +0800
[SCB-2457] governance circuit breaker support metrics (#2793)
---
dependencies/default/pom.xml | 20 +--
governance/pom.xml | 8 ++
.../governance/GovernanceConfiguration.java | 152 +++++++++++++++++++++
.../servicecomb/governance/MatchersManager.java | 7 -
.../handler/AbstractGovernanceHandler.java | 14 +-
.../governance/handler/BulkheadHandler.java | 4 -
.../governance/handler/CircuitBreakerHandler.java | 18 ++-
.../handler/InstanceIsolationHandler.java | 35 ++++-
.../governance/handler/RateLimitingHandler.java | 4 -
.../governance/handler/RetryHandler.java | 4 -
.../governance/marker/RequestProcessor.java | 4 -
.../marker/operator/CompareOperator.java | 4 -
.../marker/operator/ContainsOperator.java | 3 -
.../governance/marker/operator/ExactOperator.java | 2 -
.../governance/marker/operator/PrefixOperator.java | 2 -
.../governance/marker/operator/SuffixOperator.java | 2 -
.../governance/properties/BulkheadProperties.java | 2 -
.../properties/CircuitBreakerProperties.java | 2 -
.../properties/InstanceIsolationProperties.java | 2 -
.../governance/properties/MatchProperties.java | 2 -
.../governance/properties/RateLimitProperties.java | 2 -
.../governance/properties/RetryProperties.java | 2 -
.../governance/service/MatchersServiceImpl.java | 4 -
.../servicecomb/governance/FlowControlTest.java | 3 +-
.../governance/GovernancePropertiesTest.java | 3 +-
.../governance/InstanceIsolationTest.java | 47 ++++++-
...kRetryExtension.java => MockConfiguration.java} | 33 +++--
.../governance/MockInvocationContext.java | 3 -
.../governance/MockMicroserviceMeta.java | 3 -
.../servicecomb/governance/MockRetryExtension.java | 2 -
.../servicecomb/governance/OperatorTest.java | 6 +-
.../src/test/resources/META-INF/spring/bean.xml | 3 +-
.../metrics/prometheus/PrometheusPublisher.java | 4 +-
33 files changed, 289 insertions(+), 117 deletions(-)
diff --git a/dependencies/default/pom.xml b/dependencies/default/pom.xml
index 9002fbd8e..1e3e51620 100644
--- a/dependencies/default/pom.xml
+++ b/dependencies/default/pom.xml
@@ -83,7 +83,8 @@
<netty.version>4.1.72.Final</netty.version>
<okhttp3.version>3.14.2</okhttp3.version>
<powermock.version>1.6.2</powermock.version>
- <prometheus.version>0.6.0</prometheus.version>
+ <micrometer.version>1.8.5</micrometer.version>
+ <prometheus.version>0.12.0</prometheus.version>
<protobuf.version>3.7.1</protobuf.version>
<protostuff.version>1.5.9</protostuff.version>
<protostuff-parser.version>2.2.25</protostuff-parser.version>
@@ -446,19 +447,18 @@
</dependency>
<dependency>
- <groupId>io.prometheus</groupId>
- <artifactId>simpleclient</artifactId>
- <version>${prometheus.version}</version>
- </dependency>
- <dependency>
- <groupId>io.prometheus</groupId>
- <artifactId>simpleclient_httpserver</artifactId>
- <version>${prometheus.version}</version>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-bom</artifactId>
+ <version>${micrometer.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
</dependency>
<dependency>
<groupId>io.prometheus</groupId>
- <artifactId>simpleclient_common</artifactId>
+ <artifactId>simpleclient_bom</artifactId>
<version>${prometheus.version}</version>
+ <type>pom</type>
+ <scope>import</scope>
</dependency>
<dependency>
diff --git a/governance/pom.xml b/governance/pom.xml
index c65107357..38e997adb 100644
--- a/governance/pom.xml
+++ b/governance/pom.xml
@@ -34,6 +34,14 @@
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-all</artifactId>
</dependency>
+ <dependency>
+ <groupId>io.github.resilience4j</groupId>
+ <artifactId>resilience4j-micrometer</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>io.micrometer</groupId>
+ <artifactId>micrometer-registry-prometheus</artifactId>
+ </dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
new file mode 100644
index 000000000..63b74ddd7
--- /dev/null
+++ b/governance/src/main/java/org/apache/servicecomb/governance/GovernanceConfiguration.java
@@ -0,0 +1,152 @@
+/*
+ * 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
+ *
+ * http://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 org.apache.servicecomb.governance;
+
+import java.util.Map;
+
+import org.apache.servicecomb.governance.handler.BulkheadHandler;
+import org.apache.servicecomb.governance.handler.CircuitBreakerHandler;
+import org.apache.servicecomb.governance.handler.InstanceIsolationHandler;
+import org.apache.servicecomb.governance.handler.RateLimitingHandler;
+import org.apache.servicecomb.governance.handler.RetryHandler;
+import org.apache.servicecomb.governance.handler.ext.RetryExtension;
+import org.apache.servicecomb.governance.marker.RequestProcessor;
+import org.apache.servicecomb.governance.marker.operator.CompareOperator;
+import org.apache.servicecomb.governance.marker.operator.ContainsOperator;
+import org.apache.servicecomb.governance.marker.operator.ExactOperator;
+import org.apache.servicecomb.governance.marker.operator.MatchOperator;
+import org.apache.servicecomb.governance.marker.operator.PrefixOperator;
+import org.apache.servicecomb.governance.marker.operator.SuffixOperator;
+import org.apache.servicecomb.governance.properties.BulkheadProperties;
+import org.apache.servicecomb.governance.properties.CircuitBreakerProperties;
+import org.apache.servicecomb.governance.properties.InstanceIsolationProperties;
+import org.apache.servicecomb.governance.properties.MatchProperties;
+import org.apache.servicecomb.governance.properties.RateLimitProperties;
+import org.apache.servicecomb.governance.properties.RetryProperties;
+import org.apache.servicecomb.governance.service.MatchersService;
+import org.apache.servicecomb.governance.service.MatchersServiceImpl;
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import io.micrometer.core.instrument.MeterRegistry;
+
+@Configuration
+public class GovernanceConfiguration {
+ // properties configuration
+ @Bean
+ public BulkheadProperties bulkheadProperties() {
+ return new BulkheadProperties();
+ }
+
+ @Bean
+ public CircuitBreakerProperties circuitBreakerProperties() {
+ return new CircuitBreakerProperties();
+ }
+
+ @Bean
+ public InstanceIsolationProperties instanceIsolationProperties() {
+ return new InstanceIsolationProperties();
+ }
+
+ @Bean
+ public MatchProperties matchProperties() {
+ return new MatchProperties();
+ }
+
+ @Bean
+ public RateLimitProperties rateLimitProperties() {
+ return new RateLimitProperties();
+ }
+
+ @Bean
+ public RetryProperties retryProperties() {
+ return new RetryProperties();
+ }
+
+ // handlers configuration
+ @Bean
+ public BulkheadHandler bulkheadHandler(BulkheadProperties bulkheadProperties) {
+ return new BulkheadHandler(bulkheadProperties);
+ }
+
+ @Bean
+ public CircuitBreakerHandler circuitBreakerHandler(CircuitBreakerProperties circuitBreakerProperties,
+ ObjectProvider<MeterRegistry> meterRegistry) {
+ return new CircuitBreakerHandler(circuitBreakerProperties, meterRegistry);
+ }
+
+ @Bean
+ public InstanceIsolationHandler instanceIsolationHandler(InstanceIsolationProperties instanceIsolationProperties,
+ ObjectProvider<MeterRegistry> meterRegistry) {
+ return new InstanceIsolationHandler(instanceIsolationProperties, meterRegistry);
+ }
+
+ @Bean
+ public RateLimitingHandler rateLimitingHandler(RateLimitProperties rateLimitProperties) {
+ return new RateLimitingHandler(rateLimitProperties);
+ }
+
+ @Bean
+ public RetryHandler retryHandler(RetryProperties retryProperties, RetryExtension retryExtension) {
+ return new RetryHandler(retryProperties, retryExtension);
+ }
+
+ // request processor
+ @Bean
+ public RequestProcessor requestProcessor(Map<String, MatchOperator> operatorMap) {
+ return new RequestProcessor(operatorMap);
+ }
+
+ // matchers
+ @Bean
+ public MatchersService matchersService(RequestProcessor requestProcessor, MatchProperties matchProperties) {
+ return new MatchersServiceImpl(requestProcessor, matchProperties);
+ }
+
+ @Bean
+ public MatchersManager matchersManager(MatchersService matchersService, InvocationContext invocationContext) {
+ return new MatchersManager(matchersService, invocationContext);
+ }
+
+ // operators
+ @Bean
+ public CompareOperator compareOperator() {
+ return new CompareOperator();
+ }
+
+ @Bean
+ public ContainsOperator containsOperator() {
+ return new ContainsOperator();
+ }
+
+ @Bean
+ public ExactOperator exactOperator() {
+ return new ExactOperator();
+ }
+
+ @Bean
+ public PrefixOperator prefixOperator() {
+ return new PrefixOperator();
+ }
+
+ @Bean
+ public SuffixOperator suffixOperator() {
+ return new SuffixOperator();
+ }
+}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/MatchersManager.java b/governance/src/main/java/org/apache/servicecomb/governance/MatchersManager.java
index 1580af39d..1bb9a346e 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/MatchersManager.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/MatchersManager.java
@@ -22,24 +22,17 @@ import java.util.Map.Entry;
import org.apache.servicecomb.governance.marker.GovernanceRequest;
import org.apache.servicecomb.governance.policy.AbstractPolicy;
import org.apache.servicecomb.governance.service.MatchersService;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
public class MatchersManager {
private MatchersService matchersService;
private InvocationContext invocationContext;
- @Autowired
public MatchersManager(MatchersService matchersService, InvocationContext invocationContext) {
this.matchersService = matchersService;
this.invocationContext = invocationContext;
}
- public MatchersManager() {
- }
-
public <T extends AbstractPolicy> T match(GovernanceRequest request, Map<String, T> policies) {
Map<String, Boolean> calculatedMatches = invocationContext.getCalculatedMatches();
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/AbstractGovernanceHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/AbstractGovernanceHandler.java
index 20aca3d12..e7bd3426b 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/AbstractGovernanceHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/AbstractGovernanceHandler.java
@@ -30,7 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.eventbus.Subscribe;
public abstract class AbstractGovernanceHandler<PROCESSOR, POLICY extends AbstractPolicy> {
- private final Map<String, PROCESSOR> map = new ConcurrentHashMap<>();
+ protected final Map<String, PROCESSOR> processors = new ConcurrentHashMap<>();
private final Object lock = new Object();
@@ -52,13 +52,13 @@ public abstract class AbstractGovernanceHandler<PROCESSOR, POLICY extends Abstra
}
String key = createKey(governanceRequest, policy);
- PROCESSOR processor = map.get(key);
+ PROCESSOR processor = processors.get(key);
if (processor == null) {
synchronized (lock) {
- processor = map.get(key);
+ processor = processors.get(key);
if (processor == null) {
processor = createProcessor(governanceRequest, policy);
- map.put(key, processor);
+ processors.put(key, processor);
}
}
}
@@ -71,8 +71,12 @@ public abstract class AbstractGovernanceHandler<PROCESSOR, POLICY extends Abstra
abstract protected PROCESSOR createProcessor(GovernanceRequest governanceRequest, POLICY policy);
+ protected void onConfigurationChanged(String key) {
+ processors.remove(key);
+ }
+
@Subscribe
public void onDynamicConfigurationListener(GovernanceConfigurationChangedEvent event) {
- event.getChangedConfigurations().forEach(v -> map.remove(v));
+ event.getChangedConfigurations().forEach(v -> onConfigurationChanged(v));
}
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
index e32c0d998..fea76a617 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/BulkheadHandler.java
@@ -24,20 +24,16 @@ import org.apache.servicecomb.governance.policy.BulkheadPolicy;
import org.apache.servicecomb.governance.properties.BulkheadProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import io.github.resilience4j.bulkhead.Bulkhead;
import io.github.resilience4j.bulkhead.BulkheadConfig;
import io.github.resilience4j.bulkhead.BulkheadRegistry;
-@Component
public class BulkheadHandler extends AbstractGovernanceHandler<Bulkhead, BulkheadPolicy> {
private static final Logger LOGGER = LoggerFactory.getLogger(BulkheadHandler.class);
private final BulkheadProperties bulkheadProperties;
- @Autowired
public BulkheadHandler(BulkheadProperties bulkheadProperties) {
this.bulkheadProperties = bulkheadProperties;
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
index e7193bc0a..b1bed54ae 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/CircuitBreakerHandler.java
@@ -23,22 +23,25 @@ import org.apache.servicecomb.governance.policy.CircuitBreakerPolicy;
import org.apache.servicecomb.governance.properties.CircuitBreakerProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.beans.factory.ObjectProvider;
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
+import io.github.resilience4j.micrometer.tagged.TaggedCircuitBreakerMetrics;
+import io.micrometer.core.instrument.MeterRegistry;
-@Component
public class CircuitBreakerHandler extends AbstractGovernanceHandler<CircuitBreaker, CircuitBreakerPolicy> {
private static final Logger LOGGER = LoggerFactory.getLogger(CircuitBreakerHandler.class);
private final CircuitBreakerProperties circuitBreakerProperties;
- @Autowired
- public CircuitBreakerHandler(CircuitBreakerProperties circuitBreakerProperties) {
+ private final MeterRegistry meterRegistry;
+
+ public CircuitBreakerHandler(CircuitBreakerProperties circuitBreakerProperties,
+ ObjectProvider<MeterRegistry> meterRegistry) {
this.circuitBreakerProperties = circuitBreakerProperties;
+ this.meterRegistry = meterRegistry.getIfAvailable();
}
@Override
@@ -70,6 +73,11 @@ public class CircuitBreakerHandler extends AbstractGovernanceHandler<CircuitBrea
.slidingWindowSize(Integer.valueOf(policy.getSlidingWindowSize()))
.build();
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
+ if (meterRegistry != null) {
+ TaggedCircuitBreakerMetrics
+ .ofCircuitBreakerRegistry(circuitBreakerRegistry)
+ .bindTo(meterRegistry);
+ }
return circuitBreakerRegistry.circuitBreaker(policy.getName(), circuitBreakerConfig);
}
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
index 1299e6efe..c79887038 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/InstanceIsolationHandler.java
@@ -25,14 +25,14 @@ import org.apache.servicecomb.governance.policy.CircuitBreakerPolicy;
import org.apache.servicecomb.governance.properties.InstanceIsolationProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
+import org.springframework.beans.factory.ObjectProvider;
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;
import io.github.resilience4j.circuitbreaker.CircuitBreakerRegistry;
+import io.github.resilience4j.micrometer.tagged.TaggedCircuitBreakerMetrics;
+import io.micrometer.core.instrument.MeterRegistry;
-@Component
public class InstanceIsolationHandler extends AbstractGovernanceHandler<CircuitBreaker, CircuitBreakerPolicy> {
private static final Logger LOGGER = LoggerFactory.getLogger(CircuitBreakerHandler.class);
@@ -40,14 +40,30 @@ public class InstanceIsolationHandler extends AbstractGovernanceHandler<CircuitB
private final InstanceIsolationProperties instanceIsolationProperties;
- @Autowired
- public InstanceIsolationHandler(InstanceIsolationProperties instanceIsolationProperties) {
+ private final MeterRegistry meterRegistry;
+
+ public InstanceIsolationHandler(InstanceIsolationProperties instanceIsolationProperties,
+ ObjectProvider<MeterRegistry> meterRegistry) {
this.instanceIsolationProperties = instanceIsolationProperties;
+ this.meterRegistry = meterRegistry.getIfAvailable();
}
@Override
protected String createKey(GovernanceRequest governanceRequest, CircuitBreakerPolicy policy) {
- return InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY + "." + governanceRequest.getInstanceId();
+ return InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY
+ + "." + governanceRequest.getServiceId()
+ + "." + governanceRequest.getInstanceId();
+ }
+
+ @Override
+ protected void onConfigurationChanged(String key) {
+ if (key.startsWith(InstanceIsolationProperties.MATCH_INSTANCE_ISOLATION_KEY)) {
+ for (String processorKey : processors.keySet()) {
+ if (processorKey.startsWith(key)) {
+ processors.remove(processorKey);
+ }
+ }
+ }
}
@Override
@@ -82,9 +98,14 @@ public class InstanceIsolationHandler extends AbstractGovernanceHandler<CircuitB
.permittedNumberOfCallsInHalfOpenState(policy.getPermittedNumberOfCallsInHalfOpenState())
.minimumNumberOfCalls(policy.getMinimumNumberOfCalls())
.slidingWindowType(policy.getSlidingWindowTypeEnum())
- .slidingWindowSize(Integer.valueOf(policy.getSlidingWindowSize()))
+ .slidingWindowSize(Integer.parseInt(policy.getSlidingWindowSize()))
.build();
CircuitBreakerRegistry circuitBreakerRegistry = CircuitBreakerRegistry.of(circuitBreakerConfig);
+ if (meterRegistry != null) {
+ TaggedCircuitBreakerMetrics
+ .ofCircuitBreakerRegistry(circuitBreakerRegistry)
+ .bindTo(meterRegistry);
+ }
return circuitBreakerRegistry.circuitBreaker(governanceRequest.getInstanceId(), circuitBreakerConfig);
}
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
index 72a76b8cf..aa3ee9f2b 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/RateLimitingHandler.java
@@ -23,20 +23,16 @@ import org.apache.servicecomb.governance.policy.RateLimitingPolicy;
import org.apache.servicecomb.governance.properties.RateLimitProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RateLimiterConfig;
import io.github.resilience4j.ratelimiter.RateLimiterRegistry;
-@Component
public class RateLimitingHandler extends AbstractGovernanceHandler<RateLimiter, RateLimitingPolicy> {
private static final Logger LOGGER = LoggerFactory.getLogger(RateLimitingHandler.class);
private final RateLimitProperties rateLimitProperties;
- @Autowired
public RateLimitingHandler(RateLimitProperties rateLimitProperties) {
this.rateLimitProperties = rateLimitProperties;
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java b/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
index ba8092584..42898c58b 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/handler/RetryHandler.java
@@ -25,15 +25,12 @@ import org.apache.servicecomb.governance.properties.RetryProperties;
import org.apache.servicecomb.governance.utils.GovernanceUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
import io.github.resilience4j.core.IntervalFunction;
import io.github.resilience4j.retry.Retry;
import io.github.resilience4j.retry.RetryConfig;
import io.github.resilience4j.retry.RetryRegistry;
-@Component
public class RetryHandler extends AbstractGovernanceHandler<Retry, RetryPolicy> {
private static final Logger LOGGER = LoggerFactory.getLogger(RetryHandler.class);
@@ -42,7 +39,6 @@ public class RetryHandler extends AbstractGovernanceHandler<Retry, RetryPolicy>
private final RetryExtension retryExtension;
- @Autowired
public RetryHandler(RetryProperties retryProperties, RetryExtension retryExtension) {
this.retryProperties = retryProperties;
this.retryExtension = retryExtension;
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/RequestProcessor.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/RequestProcessor.java
index ad899fa8a..95f26b89a 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/RequestProcessor.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/RequestProcessor.java
@@ -23,10 +23,7 @@ import org.apache.servicecomb.governance.marker.operator.MatchOperator;
import org.apache.servicecomb.governance.marker.operator.RawOperator;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
public class RequestProcessor {
private static final Logger LOGGER = LoggerFactory.getLogger(RequestProcessor.class);
@@ -35,7 +32,6 @@ public class RequestProcessor {
private final Map<String, MatchOperator> operatorMap;
- @Autowired
public RequestProcessor(Map<String, MatchOperator> operatorMap) {
this.operatorMap = operatorMap;
}
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/CompareOperator.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/CompareOperator.java
index 7e44f1089..ff491ecef 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/CompareOperator.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/CompareOperator.java
@@ -19,12 +19,8 @@ package org.apache.servicecomb.governance.marker.operator;
import java.util.HashSet;
import java.util.Set;
-import org.springframework.stereotype.Component;
-
import org.apache.servicecomb.governance.exception.IllegalArgsOperatorException;
-
-@Component
public class CompareOperator implements MatchOperator {
private final Set<Character> charSet = new HashSet<>();
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ContainsOperator.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ContainsOperator.java
index 8e8327069..a5bb935f9 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ContainsOperator.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ContainsOperator.java
@@ -16,9 +16,6 @@
*/
package org.apache.servicecomb.governance.marker.operator;
-import org.springframework.stereotype.Component;
-
-@Component
public class ContainsOperator implements MatchOperator {
@Override
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ExactOperator.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ExactOperator.java
index 0a614279e..139d2f8cd 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ExactOperator.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/ExactOperator.java
@@ -17,9 +17,7 @@
package org.apache.servicecomb.governance.marker.operator;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-@Component
public class ExactOperator implements MatchOperator {
@Override
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/PrefixOperator.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/PrefixOperator.java
index 5fbf61107..e211d0d60 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/PrefixOperator.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/PrefixOperator.java
@@ -18,9 +18,7 @@
package org.apache.servicecomb.governance.marker.operator;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-@Component
public class PrefixOperator implements MatchOperator {
@Override
public boolean match(String requestValue, String patternValue) {
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/SuffixOperator.java b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/SuffixOperator.java
index 3e4a2241c..712b00b6b 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/SuffixOperator.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/marker/operator/SuffixOperator.java
@@ -18,9 +18,7 @@
package org.apache.servicecomb.governance.marker.operator;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.stereotype.Component;
-@Component
public class SuffixOperator implements MatchOperator {
@Override
public boolean match(String requestValue, String patternValue) {
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
index 2e340b786..28daf0018 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/BulkheadProperties.java
@@ -18,9 +18,7 @@
package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.policy.BulkheadPolicy;
-import org.springframework.stereotype.Component;
-@Component
public class BulkheadProperties extends PolicyProperties<BulkheadPolicy> {
public static final String MATCH_BULKHEAD__KEY = "servicecomb.bulkhead";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
index 578d34604..9b04fd0a9 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/CircuitBreakerProperties.java
@@ -17,9 +17,7 @@
package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.policy.CircuitBreakerPolicy;
-import org.springframework.stereotype.Component;
-@Component
public class CircuitBreakerProperties extends PolicyProperties<CircuitBreakerPolicy> {
public static final String MATCH_CIRCUITBREAKER_KEY = "servicecomb.circuitBreaker";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
index 2d9c478ab..0f773ed7b 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/InstanceIsolationProperties.java
@@ -18,9 +18,7 @@
package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.policy.CircuitBreakerPolicy;
-import org.springframework.stereotype.Component;
-@Component
public class InstanceIsolationProperties extends PolicyProperties<CircuitBreakerPolicy> {
public static final String MATCH_INSTANCE_ISOLATION_KEY = "servicecomb.instanceIsolation";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/MatchProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/MatchProperties.java
index 3188f90df..ca551e9c7 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/MatchProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/MatchProperties.java
@@ -17,9 +17,7 @@
package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.marker.TrafficMarker;
-import org.springframework.stereotype.Component;
-@Component
public class MatchProperties extends GovernanceProperties<TrafficMarker> {
public static final String MATCH_POLICY_KEY = "servicecomb.matchGroup";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
index 472901cf8..7aa5daef8 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/RateLimitProperties.java
@@ -18,9 +18,7 @@ package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.policy.RateLimitingPolicy;
-import org.springframework.stereotype.Component;
-@Component
public class RateLimitProperties extends PolicyProperties<RateLimitingPolicy> {
public static final String MATCH_RATE_LIMIT_KEY = "servicecomb.rateLimiting";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java b/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
index 483ea5297..b19d44653 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/properties/RetryProperties.java
@@ -17,9 +17,7 @@
package org.apache.servicecomb.governance.properties;
import org.apache.servicecomb.governance.policy.RetryPolicy;
-import org.springframework.stereotype.Component;
-@Component
public class RetryProperties extends PolicyProperties<RetryPolicy> {
public static final String MATCH_RETRY_KEY = "servicecomb.retry";
diff --git a/governance/src/main/java/org/apache/servicecomb/governance/service/MatchersServiceImpl.java b/governance/src/main/java/org/apache/servicecomb/governance/service/MatchersServiceImpl.java
index f17b938d9..b4d09af24 100644
--- a/governance/src/main/java/org/apache/servicecomb/governance/service/MatchersServiceImpl.java
+++ b/governance/src/main/java/org/apache/servicecomb/governance/service/MatchersServiceImpl.java
@@ -23,16 +23,12 @@ import org.apache.servicecomb.governance.marker.GovernanceRequest;
import org.apache.servicecomb.governance.marker.RequestProcessor;
import org.apache.servicecomb.governance.marker.TrafficMarker;
import org.apache.servicecomb.governance.properties.MatchProperties;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-@Component
public class MatchersServiceImpl implements MatchersService {
private final RequestProcessor requestProcessor;
private final MatchProperties matchProperties;
- @Autowired
public MatchersServiceImpl(RequestProcessor requestProcessor, MatchProperties matchProperties) {
this.requestProcessor = requestProcessor;
this.matchProperties = matchProperties;
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java b/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
index 304758512..3a6288f58 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/FlowControlTest.java
@@ -27,7 +27,6 @@ import org.apache.servicecomb.governance.properties.RateLimitProperties;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
@@ -37,7 +36,7 @@ import io.github.resilience4j.ratelimiter.RateLimiter;
import io.github.resilience4j.ratelimiter.RequestNotPermitted;
@SpringBootTest
-@ContextConfiguration(locations = "classpath:META-INF/spring/*.xml", initializers = ConfigDataApplicationContextInitializer.class)
+@ContextConfiguration(classes = {GovernanceConfiguration.class, MockConfiguration.class})
public class FlowControlTest {
private RateLimitingHandler rateLimitingHandler;
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
index 93394b3ed..6f6bbc05d 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/GovernancePropertiesTest.java
@@ -45,7 +45,6 @@ import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.core.env.EnumerablePropertySource;
@@ -53,7 +52,7 @@ import org.springframework.core.env.Environment;
import org.springframework.test.context.ContextConfiguration;
@SpringBootTest
-@ContextConfiguration(locations = "classpath:META-INF/spring/*.xml", initializers = ConfigDataApplicationContextInitializer.class)
+@ContextConfiguration(classes = {GovernanceConfiguration.class, MockConfiguration.class})
public class GovernancePropertiesTest {
private List<GovernanceProperties<? extends AbstractPolicy>> propertiesList;
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
index ecb6709ab..fa242196e 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/InstanceIsolationTest.java
@@ -24,25 +24,27 @@ import org.apache.servicecomb.governance.marker.GovernanceRequest;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import io.github.resilience4j.circuitbreaker.CircuitBreaker;
import io.github.resilience4j.decorators.Decorators;
import io.github.resilience4j.decorators.Decorators.DecorateCheckedSupplier;
+import io.micrometer.core.instrument.MeterRegistry;
+import io.micrometer.prometheus.PrometheusMeterRegistry;
@SpringBootTest
-@ContextConfiguration(locations = "classpath:META-INF/spring/*.xml", initializers = ConfigDataApplicationContextInitializer.class)
+@ContextConfiguration(classes = {GovernanceConfiguration.class, MockConfiguration.class})
public class InstanceIsolationTest {
private InstanceIsolationHandler instanceIsolationHandler;
+ private MeterRegistry meterRegistry;
+
@Autowired
- public void setInstanceIsolationHandler(InstanceIsolationHandler instanceIsolationHandler) {
+ public void setInstanceIsolationHandler(InstanceIsolationHandler instanceIsolationHandler,
+ MeterRegistry meterRegistry) {
this.instanceIsolationHandler = instanceIsolationHandler;
- }
-
- public InstanceIsolationTest() {
+ this.meterRegistry = meterRegistry;
}
@Test
@@ -71,6 +73,11 @@ public class InstanceIsolationTest {
// isolation from error
Assertions.assertEquals("test", ds.get());
+ Assertions.assertThrows(RuntimeException.class, () -> ds.get());
+
+ Assertions.assertThrows(RuntimeException.class, () -> ds.get());
+ Assertions.assertThrows(RuntimeException.class, () -> ds.get());
+
Assertions.assertThrows(RuntimeException.class, () -> ds.get());
Assertions.assertThrows(RuntimeException.class, () -> ds.get());
Assertions.assertThrows(RuntimeException.class, () -> ds.get());
@@ -88,6 +95,8 @@ public class InstanceIsolationTest {
Assertions.assertEquals("test", ds2.get());
Assertions.assertEquals("test", ds2.get());
+ assertMetricsNotFinish();
+
// recover from isolation
Thread.sleep(1000);
@@ -95,5 +104,31 @@ public class InstanceIsolationTest {
Assertions.assertEquals("test", ds.get());
Assertions.assertEquals("test", ds2.get());
Assertions.assertEquals("test", ds2.get());
+
+ assertMetricsFinish();
+ }
+
+ private void assertMetricsNotFinish() {
+ String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_state{name=\"instance01\",state=\"open\",} 1.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 1.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",} 1.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",} 4.0"));
+ }
+
+ private void assertMetricsFinish() {
+ String result = ((PrometheusMeterRegistry) meterRegistry).scrape();
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_state{name=\"instance01\",state=\"closed\",} 1.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_state{name=\"instance02\",state=\"closed\",} 1.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance01\",} 3.0"));
+ Assertions.assertTrue(result.contains(
+ "resilience4j_circuitbreaker_calls_seconds_count{kind=\"successful\",name=\"instance02\",} 6.0"));
}
}
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java b/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
similarity index 54%
copy from governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java
copy to governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
index 1ca9b4dae..20c5605e5 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MockConfiguration.java
@@ -17,20 +17,31 @@
package org.apache.servicecomb.governance;
-import java.util.List;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
-import org.apache.servicecomb.governance.handler.ext.RetryExtension;
-import org.springframework.stereotype.Component;
+import io.micrometer.prometheus.PrometheusConfig;
+import io.micrometer.prometheus.PrometheusMeterRegistry;
-@Component
-public class MockRetryExtension implements RetryExtension {
- @Override
- public boolean isRetry(List<String> statusList, Object result) {
- return false;
+@Configuration
+public class MockConfiguration {
+ @Bean
+ public MockInvocationContext mockInvocationContext() {
+ return new MockInvocationContext();
}
- @Override
- public boolean isRetry(Throwable e) {
- return false;
+ @Bean
+ public MockMicroserviceMeta mockMicroserviceMeta() {
+ return new MockMicroserviceMeta();
+ }
+
+ @Bean
+ public MockRetryExtension mockRetryExtension() {
+ return new MockRetryExtension();
+ }
+
+ @Bean
+ public PrometheusMeterRegistry meterRegistry() {
+ return new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
}
}
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/MockInvocationContext.java b/governance/src/test/java/org/apache/servicecomb/governance/MockInvocationContext.java
index c9ae43922..7c3e92705 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MockInvocationContext.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MockInvocationContext.java
@@ -21,9 +21,6 @@ import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
-import org.springframework.stereotype.Component;
-
-@Component
public class MockInvocationContext implements InvocationContext {
private final ThreadLocal<Map<String, Boolean>> context = new ThreadLocal<>();
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/MockMicroserviceMeta.java b/governance/src/test/java/org/apache/servicecomb/governance/MockMicroserviceMeta.java
index 552c5209d..ca68e2b3a 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MockMicroserviceMeta.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MockMicroserviceMeta.java
@@ -17,9 +17,6 @@
package org.apache.servicecomb.governance;
-import org.springframework.stereotype.Component;
-
-@Component
public class MockMicroserviceMeta implements MicroserviceMeta {
@Override
public String getName() {
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java b/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java
index 1ca9b4dae..d451f6e25 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/MockRetryExtension.java
@@ -20,9 +20,7 @@ package org.apache.servicecomb.governance;
import java.util.List;
import org.apache.servicecomb.governance.handler.ext.RetryExtension;
-import org.springframework.stereotype.Component;
-@Component
public class MockRetryExtension implements RetryExtension {
@Override
public boolean isRetry(List<String> statusList, Object result) {
diff --git a/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java b/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
index c984c06ec..82af09083 100644
--- a/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
+++ b/governance/src/test/java/org/apache/servicecomb/governance/OperatorTest.java
@@ -30,12 +30,11 @@ import org.apache.servicecomb.governance.policy.RetryPolicy;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.ConfigDataApplicationContextInitializer;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
@SpringBootTest
-@ContextConfiguration(locations = "classpath:META-INF/spring/*.xml", initializers = ConfigDataApplicationContextInitializer.class)
+@ContextConfiguration(classes = {GovernanceConfiguration.class, MockConfiguration.class})
public class OperatorTest {
private RequestProcessor requestProcessor;
@@ -44,9 +43,6 @@ public class OperatorTest {
this.requestProcessor = requestProcessor;
}
- public OperatorTest() {
- }
-
@Test
public void test_unknown_operator() {
GovernanceRequest request = new GovernanceRequest();
diff --git a/governance/src/test/resources/META-INF/spring/bean.xml b/governance/src/test/resources/META-INF/spring/bean.xml
index 69f523757..f93824417 100644
--- a/governance/src/test/resources/META-INF/spring/bean.xml
+++ b/governance/src/test/resources/META-INF/spring/bean.xml
@@ -18,10 +18,9 @@
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:cse="http://www.huawei.com/schema/paas/cse/rpc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
- <context:component-scan base-package="org.apache.servicecomb.router,org.apache.servicecomb.governance"/>
+ <context:component-scan base-package="org.apache.servicecomb.router"/>
</beans>
diff --git a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
index 18dd87a90..877d77882 100644
--- a/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
+++ b/metrics/metrics-integration/metrics-prometheus/src/main/java/org/apache/servicecomb/metrics/prometheus/PrometheusPublisher.java
@@ -94,7 +94,7 @@ public class PrometheusPublisher extends Collector implements Collector.Describa
}
}
- familySamples.add(new MetricFamilySamples("ServiceComb_Metrics", Type.UNTYPED, "ServiceComb Metrics", samples));
+ familySamples.add(new MetricFamilySamples("ServiceComb_Metrics", Type.UNKNOWN, "ServiceComb Metrics", samples));
return familySamples;
}
@@ -126,7 +126,7 @@ public class PrometheusPublisher extends Collector implements Collector.Describa
return;
}
- httpServer.stop();
+ httpServer.close();
httpServer = null;
LOGGER.info("Prometheus httpServer stopped.");
}