Java 在spring boot应用程序中,AWS上的负载平衡器请求有时会意外失败

Java 在spring boot应用程序中,AWS上的负载平衡器请求有时会意外失败,java,amazon-web-services,spring-boot,okhttp,amazon-elb,Java,Amazon Web Services,Spring Boot,Okhttp,Amazon Elb,更新 我经常得到以下回应: 响应代码502和标题[awselb/2.0] 有时: 响应代码500,标题为空 我想这是亚马逊的弹性负载平衡器在搞乱我们吧 原始问题 我们的服务器在AWS上的不同区域运行,有时它们会向彼此发出GET请求以检查其状态。我们也有外部监控服务来检查相同的呼叫 有时(太频繁)我们会收到Http 3XX响应,但我们从日志和其他监控服务中知道,所有服务器都运行良好。我们还看到了相同网络上的服务器的类似行为 我想知道我们的http客户机是否配置不当,或者某个地方有bug。请参阅下面

更新 我经常得到以下回应: 响应代码502和标题[awselb/2.0] 有时: 响应代码500,标题为空

我想这是亚马逊的弹性负载平衡器在搞乱我们吧

原始问题

我们的服务器在AWS上的不同区域运行,有时它们会向彼此发出GET请求以检查其状态。我们也有外部监控服务来检查相同的呼叫

有时(太频繁)我们会收到Http 3XX响应,但我们从日志和其他监控服务中知道,所有服务器都运行良好。我们还看到了相同网络上的服务器的类似行为

我想知道我们的http客户机是否配置不当,或者某个地方有bug。请参阅下面的代码,了解我们用于发送请求的服务。有什么建议吗?我们使用com.squareup.okhttp3版本3.14.2

(为在没有更好地隔离原因的情况下发布问题而道歉,只是希望其他人以前经历过这一点并找到解决方案。)

导入okhttp3.*;
@服务
公共类HttpClientService{
public static final MediaType JSON_MEDIA_TYPE=MediaType.parse(“application/JSON;charset=utf-8”);
私有OkHttpClient客户端=null;
私有长httpClientTimeoutSeconds=10;
@施工后
公共void init(){
this.client=new-OkHttpClient.Builder()
.connectTimeout(httpClientTimeoutSeconds,时间单位.SECONDS)
.retryOnConnectionFailure(真)
.connectionPool(新的connectionPool(20,5,时间单位为分钟))
.build();
}
公共响应获取(字符串url)引发IOException{
Request.Builder requestBuilder=新建Request.Builder()
.header(“接受”、“应用程序/json”)
.header(“接受编码”、“gzip、deflate”)
.header(“内容类型”、“应用程序/json”);
Request=requestBuilder
.url(url)
.get()
.build();
返回client.newCall(request.execute();
}
}

看起来,请求的url会导致一些“重定向”

只是一个想法: 也许请求的url会产生一些到https的重定向


当然,我会检查请求的url,以及为什么它返回一些重定向http代码。

3xx.response是否包含“服务器”头?这可能会告诉你哪个中间包在干扰。我来检查一下!如果有其他标题需要注意,请告诉我。您也可以向自己的服务器添加
Server
标题,并使用该标题确认哪个进程返回3xx响应。请参阅更新的问题。根据服务器头,它没有到达服务器看起来ELB正在替代您的服务器,可能是因为您的服务器不健康或运行缓慢。URL直接为https,但这是一个好的观点。我将尝试查看“服务器”头是否如上面所指出的那样设置。