文章目录
1、错误还原
测试环境服务发布成功后,有一个页面是通过 feign 调用另一个服务的,
然后就环境报:
RuntimeException ex=unexpected end of stream on http://xxx:4004/… executing POST http://serverCode/xxxx/list
看到这个报错就去百度这个错误,然后给到的答案都是添加 Feign 拦截器
代码如下:
@Configuration
public class OkHttpConfiguration {
@Bean
public OkHttpClient okHttpClient() {
return new OkHttpClient.Builder()
//发送异常允许重试请求
//1、有的人说是加这个好了
.retryOnConnectionFailure(true)
//2、有的人是加这里好了
.addNetworkInterceptor(chain -> {
Request build = chain.request().newBuilder().addHeader("Connection", "close").build();
return chain.proceed(build);
})
.connectionPool(pool())
//设置连接超时
.connectTimeout(10000, TimeUnit.SECONDS)
//设置读超时
.readTimeout(10000, TimeUnit.SECONDS)
//设置写超时
.writeTimeout(10000, TimeUnit.SECONDS)
.build();
}
}
上面的 1、2 两点都不是我的问题,我都加了也没有解决问题。
2、解决问题方法追踪
试了各种方法都不行,然后就用 curl 命令直接去服务器访问了接口
访问接口后报了如下的错:
curl: (56) Recv failure: connection reset by peer
这一下子就有了思路了,可能我们这个端口的服务就没有启动。但是 docker 容器是启动的呀。然后就去看了一下端口,发现问题了,springcloud 工程中 bootstrap.yml 的端口配置是的 4009,但是映射的端口是 4004,那可不找不到吗
修改端口号,重启服务。解决问题
3、总结
这个端口号本来就是 4004,有一次调试,本地已经启动了 4004,临时改为 4009,但是后来代码提交测试没有改,所以就导致了这个错。还是要细心检测配置呀这些,尤其是环境的配置,之前有一哥们把测试环境的配置干到生产了,导致损失了几十万…
所以配置的内容要多检查一下,让发布更放心一点。
有遇到同样问题的,可以从 以上 3 点来检查。有的时候可能换一种思路,可能就不一样,比如我的这个,我一直纠结这个问题报错的字面内容,却没有想到是端口映射的问题。
在此记录一下,供有遇到同样问题的地铁参考。