diff options
| author | shizhendong <[email protected]> | 2021-10-12 14:15:27 +0800 |
|---|---|---|
| committer | shizhendong <[email protected]> | 2021-10-12 14:15:27 +0800 |
| commit | 9964072ed6dce2c6ad1ffa49be4755c5cc9d51d5 (patch) | |
| tree | 136b5617f31016260ad03daa3a907475c258e615 | |
| parent | d8ef1ceb3aa9759335d0dce84315ece2959facf7 (diff) | |
fix: 解决 restTemplate 请求异常时会抛出异常,导致无法获取 错误码(503),致使 cortex/loki healthy 没有出现 UNAVAILABLE 状态,nz-web 不断重启服务问题
| -rw-r--r-- | src/main/java/net/geedge/confagent/config/RestTemplateConfig.java | 30 |
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; } |
