繁体   English   中英

AWS Lambda-缓冲读取器

[英]AWS Lambda - Buffered reader

我在AWS Lambda上使用Java获取网站的URL源代码。 我有以下代码:

URL yahoo = new URL(url);
URLConnection yc = yahoo.openConnection();
yc.addRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)");
BufferedReader in = new BufferedReader(newInputStreamReader(yc.getInputStream(), "UTF-8"));
String inputLine;
StringBuilder a = new StringBuilder();
while ((inputLine = in.readLine()) != null)a.append(inputLine);
in.close();
System.out.println(a.toString());

在某些站点上,代码可以正常运行。 每次在我的本地计算机上运行都很好。 但是,在AWS Lambda上运行时,它会卡在以下部分上:

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8"));

然后我得到:任务在20.00秒后超时。

在Lambda日志中,出现以下错误:

有效负载:java.nio.HeapByteBuffer [pos = 0 lim = 115 cap = 115]

我的猜测是,它与编码有关吗? 为什么某些站点经过绝对正确的处理,而有些却停留在该行代码上?

非常感谢您提供所有答案。

实现此工作的简单解决方案-将Lambda退出目前使用的VPC

阅读我对此线程的回答,以详细了解为什么会发生这种情况。

AWS Lambda调用不调用另一个Lambda函数-Node.js

(注意:答案与NodeJS无关)

这是建立连接,发送请求和读取响应的第一部分的时间。 显然,服务器在执行其中一项或多项操作时速度很慢。

我想这与这个错误有关https://bugs.openjdk.java.net/browse/JDK-8149169

尝试从本地系统使用相同的URL(这会导致Lambda函数超时),然后查看是否可以找到根本原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM