RestTemplate: 有什么方法可以保护jvm免受巨大响应大小的影响?

当使用RestTemplate与外部服务对话时,我不止一次在我们的应用中看到OutOfMemory错误,因为服务的数据流有几千兆的数据(由于他们那边的一个不好的实现,在错误的情况下,他们在数组的每一个元素中都发回了很大的堆栈痕迹,通常包含几千个)。它的结局是大约6GB的数据,在我们的应用程序中被jackson序列化,并且完全爆炸了jvm的Xmx。

我看了一下,但似乎没有任何方法可以防止这种情况,即当流式响应超过给定大小时,中止请求。

有什么办法可以解决这个问题吗?我们使用的是apache的httpcomponents httpclient 4.5.5,但任何其他的底层实现都可以接受。

除了RestTemplate,也欢迎Spring的反应式WebClient的解决方案。

解决方案:

这必须在底层的HTTP客户端库中执行(spring支持不同的库,比如JDK客户端,apache客户端,okHTTP…)。

在这里你说的是apache-httpcomponent,你检查过这个吗?HttpEntity.getContent() 实际上,它返回的是一个输入流,你可以自己读取,并确定何时已经超过了大小。

https:/hc.apache.orghttpcomponents-core-4.4.xhttpcoreapidocsorgapachehttpHttpEntity.html。

给TA打赏
共{{data.count}}人
人已打赏
未分类

在laravel中验证json数据的唯一字段。

2022-9-8 22:33:37

未分类

用背景色填充div元素,并去除div之间的空间。

2022-9-8 22:33:39

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索