summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorshizhendong <[email protected]>2021-10-12 14:15:27 +0800
committershizhendong <[email protected]>2021-10-12 14:15:27 +0800
commit9964072ed6dce2c6ad1ffa49be4755c5cc9d51d5 (patch)
tree136b5617f31016260ad03daa3a907475c258e615
parentd8ef1ceb3aa9759335d0dce84315ece2959facf7 (diff)
fix: 解决 restTemplate 请求异常时会抛出异常,导致无法获取 错误码(503),致使 cortex/loki healthy 没有出现 UNAVAILABLE 状态,nz-web 不断重启服务问题
-rw-r--r--src/main/java/net/geedge/confagent/config/RestTemplateConfig.java30
1 files changed, 25 insertions, 5 deletions
diff --git a/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java b/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
index 7ffd6c9..8618582 100644
--- a/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
+++ b/src/main/java/net/geedge/confagent/config/RestTemplateConfig.java
@@ -1,10 +1,5 @@
package net.geedge.confagent.config;
-import java.security.cert.CertificateException;
-import java.security.cert.X509Certificate;
-
-import javax.net.ssl.SSLContext;
-
import org.apache.http.HeaderElement;
import org.apache.http.HeaderElementIterator;
import org.apache.http.HttpResponse;
@@ -27,10 +22,18 @@ import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpStatus;
import org.springframework.http.client.ClientHttpRequestFactory;
+import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
+import org.springframework.web.client.DefaultResponseErrorHandler;
import org.springframework.web.client.RestTemplate;
+import javax.net.ssl.SSLContext;
+import java.io.IOException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
/**
* Http resttemplate 配置
**/
@@ -72,6 +75,23 @@ public class RestTemplateConfig {
public RestTemplate restTemplate(RestTemplateBuilder builder, ClientHttpRequestFactory requestFactory) {
RestTemplate restTemplate = builder.build();
restTemplate.setRequestFactory(requestFactory);
+ restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
+ @Override
+ public boolean hasError(ClientHttpResponse response) throws IOException {
+ int rawStatusCode = response.getRawStatusCode();
+ HttpStatus statusCode = HttpStatus.resolve(rawStatusCode);
+ return (statusCode != null ? statusCode.isError() : hasError(rawStatusCode));
+ }
+
+ protected boolean hasError(int unknownStatusCode) {
+ HttpStatus.Series series = HttpStatus.Series.resolve(unknownStatusCode);
+ return (series == HttpStatus.Series.CLIENT_ERROR || series == HttpStatus.Series.SERVER_ERROR);
+ }
+
+ @Override
+ public void handleError(ClientHttpResponse response) {
+ }
+ });
return restTemplate;
}