From bcb18a40aace4707cb984e2993665aa16e275a6f Mon Sep 17 00:00:00 2001
From: provenceee <83857838+provenceee@users.noreply.github.com>
Date: Mon, 11 Nov 2024 20:05:35 +0800
Subject: [PATCH] *add springboot3 it
Signed-off-by: provenceee <83857838+provenceee@users.noreply.github.com>
---
.github/actions/common/spring/action.yml | 17 +-
.../spring/router/spring-router/action.yml | 20 +--
.../workflows/spring_integration_test_2.yml | 47 +++---
.../rest-consumer/pom.xml | 5 +
.../consumer/FlowcontrolConiguration.java | 6 +-
.../FlowcontrolConiguration.java.springboot3 | 146 ++++++++++++++++++
.../consumer/ClientController.java | 12 --
.../consumer/ServerController.java | 12 --
8 files changed, 204 insertions(+), 61 deletions(-)
create mode 100644 sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.springboot3
diff --git a/.github/actions/common/spring/action.yml b/.github/actions/common/spring/action.yml
index 476238da78..277e9baba5 100644
--- a/.github/actions/common/spring/action.yml
+++ b/.github/actions/common/spring/action.yml
@@ -57,11 +57,24 @@ runs:
key: ${{ runner.os }}-agent-${{ github.run_id }}
- name: plugin change check
uses: ./.github/actions/common/plugin-change-check
+ - name: change feign version
+ shell: bash
+ if: matrix.springCloudVersion != '2022.0.0' && matrix.springCloudVersion != '2022.0.1' && matrix.springCloudVersion != '2022.0.2'
+ run: |
+ sed -i 's/org.apache.httpcomponents/org.apache.httpcomponents.client5/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/pom.xml
+ sed -i 's/httpclient/httpclient5/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/pom.xml
+ sed -i 's/org.apache.http.conn/org.apache.hc.client5.http/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration/FeignClientSslConfigurationHighVersion.java.highVersion
- name: change file version
# For build feign client ssl call config, according to springCloud version discriminate high and low config.
- if: matrix.springCloudVersion == '2020.0.0' || matrix.springCloudVersion == '2021.0.0' || matrix.springCloudVersion == '2021.0.3'
shell: bash
run: |
mv sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration/FeignClientSslConfigurationLowVersion.java sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration/FeignClientSslConfigurationLowVersion.java.lowVersion
mv sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration/FeignClientSslConfigurationHighVersion.java.highVersion sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration/FeignClientSslConfigurationHighVersion.java
- ls sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration
\ No newline at end of file
+ ls sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/configuration
+ sed -i 's/qualifier/qualifiers/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/FeignService.java
+ sed -i 's/qualifier/qualifiers/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-api/src/main/java/com/huaweicloud/spring/feign/api/RemovalService.java
+ sed -i 's/javax.servlet.http/jakarta.servlet.http/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign/feign-provider/src/main/java/com/huaweicloud/spring/feign/provider/FeignServiceImpl.java
+ sed -i 's/javax.servlet.http/jakarta.servlet.http/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-provider/src/main/java/com/huaweicloud/spring/rest/provider/RouterController.java
+ sed -i 's/javax.annotation/jakarta.annotation/' sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/BootRegistryHttpClientController.java
+ mv sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.spring
+ mv sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.springboot3 sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java
\ No newline at end of file
diff --git a/.github/actions/scenarios/spring/router/spring-router/action.yml b/.github/actions/scenarios/spring/router/spring-router/action.yml
index 20fc90aae2..9baa6ae97c 100644
--- a/.github/actions/scenarios/spring/router/spring-router/action.yml
+++ b/.github/actions/scenarios/spring/router/spring-router/action.yml
@@ -38,7 +38,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env:env-001
SERVER_PORT: 8013
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign${{ env.tailVersion }}/feign-provider${{ env.tailVersion }}/target/feign-provider${{ env.tailVersion }}.jar > ${{ env.logDir }}/feign-provider.log 2>&1 &
- name: start second feign provider service
shell: bash
@@ -52,7 +52,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env:env-002
SERVER_PORT: 8014
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign${{ env.tailVersion }}/feign-provider${{ env.tailVersion }}/target/feign-provider${{ env.tailVersion }}.jar > ${{ env.logDir }}/feign-provider2.log 2>&1 &
- name: start third feign provider service
shell: bash
@@ -66,7 +66,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env1:env-002
SERVER_PORT: 8015
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign${{ env.tailVersion }}/feign-provider${{ env.tailVersion }}/target/feign-provider${{ env.tailVersion }}.jar > ${{ env.logDir }}/feign-provider3.log 2>&1 &
- name: start fourth feign provider service
shell: bash
@@ -79,7 +79,7 @@ runs:
ROUTER_PLUGIN_REQUEST_TAGS: "[Test-Env,Test-Env1]"
SERVER_PORT: 8016
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign${{ env.tailVersion }}/feign-provider${{ env.tailVersion }}/target/feign-provider${{ env.tailVersion }}.jar > ${{ env.logDir }}/feign-provider4.log 2>&1 &
- name: start feign consumer service
shell: bash
@@ -93,7 +93,7 @@ runs:
SERVER_PORT: 8017
SERMANT_SPRINGBOOT_REGISTRY_LB_MAXRETRY: 0
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-feign${{ env.tailVersion }}/feign-consumer${{ env.tailVersion }}/target/feign-consumer${{ env.tailVersion }}.jar > ${{ env.logDir }}/feign-consumer.log 2>&1 &
- name: start resttemplate provider service
shell: bash
@@ -107,7 +107,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env:env-001
SERVER_PORT: 8018
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-provider/target/rest-provider.jar > ${{ env.logDir }}/rest-provider.log 2>&1 &
- name: start second resttemplate provider service
shell: bash
@@ -121,7 +121,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env:env-002
SERVER_PORT: 8019
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-provider/target/rest-provider.jar > ${{ env.logDir }}/rest-provider2.log 2>&1 &
- name: start third resttemplate provider service
shell: bash
@@ -135,7 +135,7 @@ runs:
SERVICE_META_PARAMETERS: Test-Env1:env-002
SERVER_PORT: 8020
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-provider/target/rest-provider.jar > ${{ env.logDir }}/rest-provider3.log 2>&1 &
- name: start fourth resttemplate provider service
shell: bash
@@ -148,7 +148,7 @@ runs:
ROUTER_PLUGIN_REQUEST_TAGS: "[Test-Env,Test-Env1]"
SERVER_PORT: 8021
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-provider/target/rest-provider.jar > ${{ env.logDir }}/rest-provider4.log 2>&1 &
- name: start resttemplate consumer service
shell: bash
@@ -162,7 +162,7 @@ runs:
SERVER_PORT: 8022
SERMANT_SPRINGBOOT_REGISTRY_LB_MAXRETRY: 0
run: |
- nohup java -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
+ nohup java -Dnet.bytebuddy.experimental=true --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/sun.net.www=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.http=ALL-UNNAMED -javaagent:sermant-agent-${{ env.sermantVersion }}/agent/sermant-agent.jar=appName=default -jar \
sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/target/rest-consumer.jar > ${{ env.logDir }}/rest-consumer.log 2>&1 &
- name: waiting for services start
shell: bash
diff --git a/.github/workflows/spring_integration_test_2.yml b/.github/workflows/spring_integration_test_2.yml
index eb5250adb5..a6e8fb7a03 100644
--- a/.github/workflows/spring_integration_test_2.yml
+++ b/.github/workflows/spring_integration_test_2.yml
@@ -87,35 +87,34 @@ jobs:
strategy:
matrix:
include:
- - springBootVersion: "1.5.0.RELEASE"
- springCloudVersion: "Edgware.SR2"
- nacosVersion: "1.5.0.RELEASE"
- - springBootVersion: "2.0.2.RELEASE"
- springCloudVersion: "Finchley.RELEASE"
+ - springBootVersion: "3.0.4"
+ springCloudVersion: "2022.0.0"
+ - springBootVersion: "3.0.8"
+ springCloudVersion: "2022.0.1"
httpClientVersion: "4.1.3"
- nacosVersion: "2.0.0.RELEASE"
- - springBootVersion: "2.1.0.RELEASE"
- springCloudVersion: "Greenwich.RELEASE"
+ - springBootVersion: "3.0.12"
+ springCloudVersion: "2022.0.2"
httpClientVersion: "4.2.6"
- nacosVersion: "2.1.0.RELEASE"
- - springBootVersion: "2.2.0.RELEASE"
- springCloudVersion: "Hoxton.RELEASE"
+ - springBootVersion: "3.1.4"
+ springCloudVersion: "2022.0.3"
httpClientVersion: "4.3.6"
- nacosVersion: "2.2.0.RELEASE"
- - springBootVersion: "2.3.0.RELEASE"
- springCloudVersion: "Hoxton.RELEASE"
+ - springBootVersion: "3.1.8"
+ springCloudVersion: "2022.0.4"
httpClientVersion: "4.4.1"
- nacosVersion: "2.2.8.RELEASE"
- - springBootVersion: "2.4.0"
- springCloudVersion: "2020.0.0"
+ - springBootVersion: "3.1.12"
+ springCloudVersion: "2022.0.5"
httpClientVersion: "4.5.6"
- nacosVersion: "2021.0.1.0"
- - springBootVersion: "2.6.2"
- springCloudVersion: "2021.0.0"
+ - springBootVersion: "3.2.4"
+ springCloudVersion: "2023.0.0"
httpClientVersion: "4.5.10"
- nacosVersion: "2021.1"
- - springBootVersion: "2.7.2"
- springCloudVersion: "2021.0.3"
+ - springBootVersion: "3.2.8"
+ springCloudVersion: "2023.0.1"
+ httpClientVersion: "4.5.13"
+ - springBootVersion: "3.3.0"
+ springCloudVersion: "2023.0.2"
+ httpClientVersion: "4.5.13"
+ - springBootVersion: "3.3.5"
+ springCloudVersion: "2023.0.3"
httpClientVersion: "4.5.13"
fail-fast: false
steps:
@@ -124,7 +123,7 @@ jobs:
fetch-depth: 100
- name: set java version to environment
run: |
- echo "javaVersion=8" >> $GITHUB_ENV
+ echo "javaVersion=21" >> $GITHUB_ENV
- name: common operations
uses: ./.github/actions/common/spring
- name: (spring router) test for springboot=${{ matrix.springBootVersion }} springCloudVersion=${{ matrix.springCloudVersion }}
diff --git a/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/pom.xml b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/pom.xml
index 2fa1d8314f..c6bb5df9b9 100644
--- a/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/pom.xml
+++ b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/pom.xml
@@ -53,6 +53,11 @@
httpclient
${httpclient.version}
+
+ org.apache.httpcomponents.client5
+ httpclient5
+ 5.1.1
+
diff --git a/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java
index 08d09e5260..833062e073 100644
--- a/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java
+++ b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java
@@ -17,6 +17,8 @@
package com.huaweicloud.spring.rest.consumer;
+import com.huaweicloud.spring.common.flowcontrol.handlers.RestTemplateResponseErrorHandler;
+
import org.apache.http.client.config.RequestConfig;
import org.apache.http.conn.ssl.NoopHostnameVerifier;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
@@ -63,7 +65,9 @@ public class FlowcontrolConiguration {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
- return new RestTemplate();
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
+ return restTemplate;
}
/**
diff --git a/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.springboot3 b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.springboot3
new file mode 100644
index 0000000000..bdb3494f4b
--- /dev/null
+++ b/sermant-integration-tests/spring-test/spring-common-demos/spring-common-resttemplate/rest-consumer/src/main/java/com/huaweicloud/spring/rest/consumer/FlowcontrolConiguration.java.springboot3
@@ -0,0 +1,146 @@
+/*
+ * Copyright (C) 2022-2022 Huawei Technologies Co., Ltd. All rights reserved.
+ *
+ * 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
+ *
+ * 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 com.huaweicloud.spring.rest.consumer;
+
+import com.huaweicloud.spring.common.flowcontrol.handlers.RestTemplateResponseErrorHandler;
+
+import org.apache.hc.client5.http.config.RequestConfig;
+import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.client5.http.impl.classic.HttpClients;
+import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
+import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
+import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
+import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
+import org.apache.hc.core5.http.config.Registry;
+import org.apache.hc.core5.http.config.RegistryBuilder;
+import org.apache.hc.core5.ssl.SSLContexts;
+import org.apache.hc.core5.ssl.TrustStrategy;
+import org.apache.hc.core5.util.Timeout;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
+import org.springframework.web.client.RestTemplate;
+
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+
+import javax.net.ssl.SSLContext;
+
+/**
+ * 流控配置类
+ *
+ * @author zhouss
+ * @since 2022-07-28
+ */
+@Configuration
+public class FlowcontrolConiguration {
+ private static final Logger LOGGER = LoggerFactory.getLogger(FlowcontrolConiguration.class);
+ private static final Timeout TIME_OUT = Timeout.ofMinutes(5);
+
+ @Value("${timeout}")
+ private int timeout;
+
+ /**
+ * 注入请求器
+ *
+ * @return RestTemplate
+ */
+ @LoadBalanced
+ @Bean
+ public RestTemplate restTemplate() {
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
+ return restTemplate;
+ }
+
+ /**
+ * 离群实例摘除的注入请求器
+ *
+ * @return RestTemplate
+ */
+ @LoadBalanced
+ @Bean("removalRestTemplate")
+ public RestTemplate removalRestTemplate() {
+ RestTemplate template = new RestTemplate();
+ SimpleClientHttpRequestFactory rf = (SimpleClientHttpRequestFactory) template.getRequestFactory();
+ rf.setReadTimeout(timeout);
+ return template;
+ }
+
+ /**
+ * 注入请求器
+ *
+ * @return RestTemplate
+ */
+ @LoadBalanced
+ @Bean("routerRestTemplate")
+ public RestTemplate routerRestTemplate() {
+ return new RestTemplate();
+ }
+
+ /**
+ * 注入请求器
+ *
+ * @return RestTemplate
+ */
+ @LoadBalanced
+ @Bean("gracefulRestTemplate")
+ public RestTemplate gracefulRestTemplate() {
+ return buildRestTemplate();
+ }
+
+ private RestTemplate buildRestTemplate() {
+ RestTemplate restTemplate = null;
+ try {
+ restTemplate = new RestTemplate(buildHttpRequestFactory());
+ } catch (KeyStoreException | NoSuchAlgorithmException | KeyManagementException e) {
+ LOGGER.error("build SSL restTemplate failed!");
+ }
+ return restTemplate;
+ }
+
+ private HttpComponentsClientHttpRequestFactory buildHttpRequestFactory()
+ throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
+ TrustStrategy strategy = (x509Certificates, authType) -> true;
+ SSLContext sslContext = SSLContexts.custom().loadTrustMaterial(null, strategy).build();
+ RequestConfig requestConfig = RequestConfig.custom()
+ /*.setSocketTimeout(TIME_OUT)*/.setConnectTimeout(TIME_OUT).setConnectionRequestTimeout(TIME_OUT).build();
+ HttpClientBuilder httpClientBuilder = HttpClients.custom();
+ httpClientBuilder.setDefaultRequestConfig(requestConfig);
+ SSLConnectionSocketFactory factory = new SSLConnectionSocketFactory(sslContext, new NoopHostnameVerifier());
+ Registry socketFactoryRegistry =
+ RegistryBuilder. create()
+ .register("https", factory)
+ .register("http", new PlainConnectionSocketFactory())
+ .build();
+ BasicHttpClientConnectionManager connectionManager = new BasicHttpClientConnectionManager(socketFactoryRegistry);
+ httpClientBuilder.setConnectionManager(connectionManager);
+ CloseableHttpClient httpClient = httpClientBuilder.build();
+ HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
+ requestFactory.setHttpClient(httpClient);
+ return requestFactory;
+ }
+}
diff --git a/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ClientController.java b/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ClientController.java
index 679b5ccd48..dc0fe8763d 100644
--- a/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ClientController.java
+++ b/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ClientController.java
@@ -17,8 +17,6 @@
package com.huaweicloud.spring.common.flowcontrol.consumer;
-import com.huaweicloud.spring.common.flowcontrol.handlers.RestTemplateResponseErrorHandler;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -31,8 +29,6 @@
import java.util.Locale;
import java.util.UUID;
-import javax.annotation.PostConstruct;
-
/**
* 基于Client端的治理测试
*
@@ -51,14 +47,6 @@ public class ClientController {
@Autowired
private RestTemplate restTemplate;
- /**
- * 初始化
- */
- @PostConstruct
- public void init() {
- restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
- }
-
/**
* 实例隔离接口测试
*
diff --git a/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ServerController.java b/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ServerController.java
index 50f61f3867..7d2b026560 100644
--- a/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ServerController.java
+++ b/sermant-integration-tests/spring-test/spring-common/src/main/java/com/huaweicloud/spring/common/flowcontrol/consumer/ServerController.java
@@ -17,8 +17,6 @@
package com.huaweicloud.spring.common.flowcontrol.consumer;
-import com.huaweicloud.spring.common.flowcontrol.handlers.RestTemplateResponseErrorHandler;
-
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
@@ -33,8 +31,6 @@
import java.util.Locale;
-import javax.annotation.PostConstruct;
-
/**
* 流控服务端测试
*
@@ -54,14 +50,6 @@ public class ServerController {
@Autowired
private RestTemplate restTemplate;
- /**
- * 初始化
- */
- @PostConstruct
- public void init() {
- restTemplate.setErrorHandler(new RestTemplateResponseErrorHandler());
- }
-
/**
* 限流测试
*