gpt4 book ai didi

java - 如何更改 Google 应用引擎上 Web 服务调用的默认超时时间?

转载 作者:行者123 更新时间:2023-11-30 08:26:26 25 4
gpt4 key购买 nike

我的 Google App Engine 应用程序使用网络服务,该网络服务响应速度非常慢,有时我的应用程序会崩溃:

java.net.SocketTimeoutException: Timeout while fetching URL: http://...

为了调用此 Web 服务,我使用了通过 wsimport(用于解析现有 WSDL 文件并生成所需文件的 Java 工具)生成的类。

我需要为此调用或全局更改我所有应用 URL 提取的默认截止时间(5 秒)。

应用引擎文档:

You can set a deadline for a request, the most amount of time the service will wait for a response. By default, the deadline for a fetch is 5 seconds. The maximum deadline is 60 seconds for HTTP requests and 10 minutes for task queue and cron job requests. When using the URLConnection interface, the service uses the connection timeout (setConnectTimeout()) plus the read timeout (setReadTimeout()) as the deadline.

Source : https://developers.google.com/appengine/docs/java/urlfetch/#Java_Making_requests

我试图在我的代码中添加这行(in strong below)来更改截止日期,但它没有用:

URL urlConnection = new URL(url);

URLConnection connection = urlConnection.openConnection();

connection.setConnectTimeout(180000); // 3 minutes

connection.setReadTimeout(180000); // 3 minutes

SWS webService = new SWS(urlConnection, new QName("http://...", "SWS"));

注意:SWS 是 wsimport 从我的 WSDL 生成的主类

最佳答案

一分钟前在这里发布,因为也没有被接受的答案:Can I globally set the timeout of HTTP connections?

对于带有 JAX-WS 的 App Engine,您必须设置请求上下文(今天使用 SDK 1.9.15 进行测试)。对于普通机器,您不能超过 60s,必须切换到更大的机器 (Bx) 才能更好地使用任务队列。

对于本地测试,您通常会使用 BindingProviderProperties.CONNECT_TIMEOUT 和 BindingProviderProperties.REQUEST_TIMEOUT,但它们不在 App Engine JRE 白名单中,您的代码检查可能会不断警告您。但是可以使用等效的字符串:

com.sun.xml.internal.ws.connect.timeout
com.sun.xml.internal.ws.connect.timeout

用于部署到 App Engine:

com.sun.xml.ws.connect.timeout
com.sun.xml.ws.request.timeout

如何将其应用于 JAX-WS 2.x 自动生成的代码的完整示例,必须以毫秒为单位提供值:

@WebEndpoint(name = "Your.RandomServicePort")
public YourServiceInterface getYourRandomServicePort() {
YourRandomServiceInterface port = super.getPort(YOURRANDOMSERVICE_QNAME_PORT, YourRandomServiceInterface.class);
Map<String, Object> requestContext = ((BindingProvider)port).getRequestContext();
requestContext.put("com.sun.xml.ws.connect.timeout", 10000);
requestContext.put("com.sun.xml.ws.request.timeout", 10000);
return port;
}

关于java - 如何更改 Google 应用引擎上 Web 服务调用的默认超时时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21484221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com