我有一个 Ballerina API,并且有一个 API 调用,遗憾的是 API 需要一分钟多的时间才能响应,而 Ballerina 在 1 分钟后超时。我尝试尽可能增加芭蕾舞演员超时,但一分钟后 API 仍然会抛出超时。有没有办法解决这个问题。
最终http:客户端organization_CustomerMs =检查新(organization_url, 安全套接字 = { 启用:假 }, 超时=800000 );
这是代码设置。
您正在服务中使用这个
organization_CustomerMs
,对吧?如果是这样,则可能是您对该服务发出的请求超时。
您可以做的就是增加服务器的超时时间。您可以通过更改侦听器配置来做到这一点。
服务定义示例-:
service /foo on new http:Listener(9090, {timeout: 180}) {
}
我相信您有如下的直通服务:
import ballerina/http;
final http:Client clientEP = check new("http://localhost:9090");
service /api on new http:Listener(9091) {
resource function get greeting() returns string|error {
return clientEP->/greeting;
}
}
如果您收到
500
状态代码响应以及以下错误消息:
Idle timeout triggered before initiating inbound response
那么这意味着服务内部使用的客户端在收到响应之前超时。
要解决此问题,您必须按照您提到的那样增加客户端配置中的超时:
// Default timeout is 60s
final http:Client clientEP = check new("http://localhost:9090", timeout = 100);
但即使您增加此值,您也会遇到
408 - Request Timeout
响应,并显示以下错误消息:
Idle timeout triggered before initiating outbound response
这是因为服务器默认有 60 秒的超时时间,在收到客户端的响应之前就超时了。所以我们还必须增加服务器端的侦听器超时时间:
import ballerina/http;
final http:Client clientEP = check new("http://localhost:9090", timeout = 100);
service /api on new http:Listener(9091, timeout = 100) {
resource function get greeting() returns string|error {
return clientEP->/greeting;
}
}