nested exception is feign.RetryableException: Incomplete output stream executing POST http://-程序员宅基地

技术标签: 微服务  spring cloud  微服务入门到入土  http  

一、背景

SpringCloud微服务框架中使用OpenFeign做服务间调用时(入参为@ResponseBody标注的JavaBean,请求类型为POST),被调用方正常执行,调用方报错,报错信息如下:

nested exception is feign.RetryableException: Incomplete output stream executing POST http://SERVICE-A/user/] with root cause
在这里插入图片描述

二、原因分析

从报错的截图可以看出feign采用jdk原生HttpURLConnection向下游服务发起http请求,这里报错的原因是:执行POST的输出流不完整,即在OutputStream写入流时出错。

三、解决方案

1、使用Apache HttpClient替换掉原生的HttpURLConnection。

在服务调用方pom.xml文件中添加如下依赖:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-httpclient</artifactId>
</dependency>

不需要在application.yml中使用feign.httpclient.enabled=true指定使用HttpClient。

因为在将LoadBalancerFeignClient注入到Spring容器时,采用HttpClient方式的配置类HttpClientFeignLoadBalancedConfiguration的条件装配信息如下:

在这里插入图片描述

对属性feign.httpclient.enabled做评估时,如果未指定该属性,则默认为true,因此只需要可以找到feign.httpclient包的ApacheHttpClient类即会使用Apache的httpClient。

2、使用okClient替换掉原生的HttpURLConnection

在服务调用方pom.xml文件中添加如下依赖:

<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-okhttp</artifactId>
</dependency>

另外需要在application.yml中使用feign.okhttp.enabled=true指定使用OKHttpClient。

因为在将LoadBalancerFeignClient注入到Spring容器时,采用OKHttpClient方式的配置类OkHttpFeignLoadBalancedConfiguration的条件装配信息如下:

在这里插入图片描述

对属性feign.okhttp.enabled做评估时,如果未指定该属性(默认为false) 或指定为 false则当前配置类不符合条件装配的规则,则不会使用OKHttpClient;另外还需要引入feign.okhttp包的OkHttpClient类。

四、其他

想了解更多OpenFeign的知识点,可以看博主的OpenFeign系列文章:

  1. SpringCloud之Feign实现声明式客户端负载均衡详细案例
  2. SpringCloud之OpenFeign实现服务间请求头数据传递(OpenFeign拦截器RequestInterceptor的使用)
  3. SpringCloud之OpenFeign的常用配置(超时、数据压缩、日志)
  4. SpringCloud之OpenFeign的核心组件(Encoder、Decoder、Contract)
  5. SpringBoot启动流程中开启OpenFeign的入口(ImportBeanDefinitionRegistrar详解)
  6. 源码剖析OpenFeign如何扫描所有的FeignClient
  7. 源码剖析OpenFeign如何为FeignClient生成动态代理类
  8. …等等等
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Saintmm/article/details/125695766

智能推荐

C 用函数递归计算10!_用c/c++语言编写10!的递归算法程序-程序员宅基地

文章浏览阅读3.1k次。编程学习-函数_用c/c++语言编写10!的递归算法程序

鸿蒙app学习笔记一_entrymodules-程序员宅基地

文章浏览阅读2.5k次,点赞3次,收藏5次。对鸿蒙app开发一些基础知识的学习,以及有关的集成开发工具Deveco Studio的学习。_entrymodules

[NOIP2001 普及组] 最大公约数和最小公倍数问题_c++ 最大公约数和最小公倍数问题noip2001-程序员宅基地

文章浏览阅读364次。#include #include #include using namespace std; long long int yueshu(int x,int y){ if(x%y==0){ return y; }else{ return yueshu(y,x%y); }} int main(){ int x,y; cin>>x>>y; int t=x; _c++ 最大公约数和最小公倍数问题noip2001

如何测试占空比_占空比的测试与调整-程序员宅基地

文章浏览阅读1.9k次。2.读取当前频谱仪波形中的 Ton和Tof时间,计算占空比x(TON/(TON+TOFF))。Sweep time Trace RMS 或 Sample(设备没有 RMS 检测器时)Sweep Time 10ms ≤Sweep point*工(工为当前模式传输周期)3.取10log(1/x),如图计算出来是0.3,加到功率计对应的功率上面。好久不测试占空比,快忘了,幸亏同事提醒,用15分钟的时间维度测试完占空比。_占空比的测试与调整

acm之旅--保研练习系列-程序员宅基地

文章浏览阅读451次。文章目录A - Max Sum Plus PlusB - Ignatius and the Princess IVC - Monkey and BananaD - Doing HomeworkE - Super Jumping! Jumping! Jumping!F - Piggy-Bank题目链接:保研练习系列A - Max Sum Plus Plus题目链接:A - Max Sum Pl...

Avro与JAVA_java使用avro示例-程序员宅基地

文章浏览阅读705次。我们已经接触过很多序列化框架(或者集成系统),比如protobuf、hessian、thrift等,它们各有优缺点以及各自的实用场景,Avro也是一个序列化框架,它的设计思想、编程模式都和thirft非常相似,也都是Apache的顶级项目。Avro还提供了RPC机制,可以不需要生成额外的API代码即可使用Avro来存储数据和RPC交互,“代码生成”是可选的,这一点区别于protobuf和thrif_java使用avro示例

随便推点

OpenWrt开发(4)-- 添加内核驱动模块 -- 读写寄存器_openwrt驱动开发-程序员宅基地

文章浏览阅读1.1k次,点赞2次,收藏8次。本文以建立一个能够读写寄存器数值的内核驱动模块来介绍如何给OpenWr添加内核驱动模块。_openwrt驱动开发

oracle sysdate-1/24的意思解释-程序员宅基地

文章浏览阅读1.1w次。oracle sysdate-1/24的意思解释在oracle中,查询出来的日期往前推迟多长时间计算,我们可以用date-A/B/C/D这种格式:其中A ---------表示天其中B----------表示小时其中C----------表示分钟其中D----------表示秒实例:如果我们计算当前时间往前推3小时,就应该这样去写select sysdate-1/8 from dua..._sysdate-1/24

ACM-CCPC中国大学生程序设计竞赛长春赛区(2016)地区赛——花开花落两相知_2016 ccpc changchun regional contest)-程序员宅基地

文章浏览阅读3.3k次。Day0早上早早地起,晚上晚晚地到,一整天就在赶路中度过了。前一天晚上收拾好了行囊(毛衣+去年EC-final发的棉夹克+两桶泡面+电脑+手机充电器+雨伞+模板),据说长春特别冷,而我们这种南方城市还在穿短袖。早上7点多的动车,经历11个小时赶往沈阳北,再转动车到长春,真心觉得路好长。怎么打发这段漫长时光(虽然听说别人还有需要48+才能到长春的),结果最终就那样昏昏沉沉地睡了一天。_2016 ccpc changchun regional contest)

Java学习--黑马SpringBoot3课程个人总结-2024-02-14-程序员宅基地

文章浏览阅读895次,点赞17次,收藏29次。/声明一个异步的函数。//声明一个异步的函数。

Python 串口收发的异步程序_serial_asyncio-程序员宅基地

文章浏览阅读1.2k次。本文给出了一个使用pyseria_asyncio 模块进行串口异步编程的简单实例。该实例可以独立运行。_serial_asyncio

STM32 USB相关知识扫盲-程序员宅基地

文章浏览阅读1.8w次,点赞43次,收藏330次。STM32 USB相关知识扫盲1、基础知识STM32基础型(F1系列)所带的USB是全速。2、电气属性USB的通信都是由主机发起的,这一点与IIC协议是类似的。2.1 数据线USB使用差分传输模式,有两条数据线,分别是:USB数据正信号线,USB Data Positive,即USB-DP线,简写为D+USB数据负信号线,USB Data Minus, 即USB-DM线,简写为D-剩下的就是电源线(5V-Vbus)和地线(GND)。2.2 USB主机是如何识别设备是高速设备/全速_stm32 usb