feign 调用报错(unexpected end of stream on xxx ... executing POST xxx)

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 点来检查。有的时候可能换一种思路,可能就不一样,比如我的这个,我一直纠结这个问题报错的字面内容,却没有想到是端口映射的问题。

在此记录一下,供有遇到同样问题的地铁参考。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
当使用Feign进行远程调用时,有时会遇到.lang.reflect.InvocationTargetException异常。这个异常是由Java的反射机制引起的,表示在调用方法时发生了异常。 java.lang.reflect.InvocationTargetException是一个包装异常,它将原始异常封装在内部。通常,我们需要查看InvocationTargetException的getCause()方法来获取实际的异常信息。 出现java.lang.reflect.InvocationTargetException异常的原因可能有很多,以下是一些常见的情况: 1. 远程服务不可用:如果远程服务没有启动或者无法访问,Feign调用就会失败,并抛出InvocationTargetException异常。 2. 请求参数错误:如果Feign调用的请求参数不正确,例如参数类型不匹配或者缺少必要的参数,远程服务可能会抛出异常,并导致InvocationTargetException异常。 3. 远程服务异常:如果远程服务在处理请求时发生了异常,它可能会将异常信息返回给Feign客户端,并导致InvocationTargetException异常。 为了解决这个问题,我们可以通过以下步骤来排查: 1. 检查远程服务是否正常运行,并确保可以正常访问。 2. 检查Feign调用的请求参数是否正确,并与远程服务的接口定义进行对比。 3. 查看InvocationTargetException的getCause()方法返回的异常信息,以确定实际的异常原因。 4. 根据具体的异常原因采取相应的措施,例如修复远程服务的bug或者调整Feign调用的参数。 希望以上信息对您有帮助!如果您还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值