我正在使用 RestEasy Client 调用网络服务。一项要求是,如果调用运行超过 5 秒,则中止/超时调用。我将如何使用 RestEasy Client 实现这一目标?我只看到服务器端超时,即如果在特定时间内未完成请求,Rest Easy 网络服务将使请求超时。
最佳答案
RESTEasy 客户端通常使用 Apache HttpClient 来处理网络对话。
您可以使用自己的自定义超时参数覆盖 HttpClient 属性:
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpParams params = httpClient.getParams();
HttpConnectionParams.setConnectionTimeout(params, connectionTimeoutMillis);
HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis);
第一个参数允许您指定建立初始连接的超时时间,第二个参数允许您指定套接字在没有数据发送时等待的最长时间。
您可以使用修改后的 HttpClient 来构建您的 ClientExecutor:
ClientExecutor executor = new ApacheHttpClient4Executor(httpClient);
可以依次使用它来构建 ClientRequest 对象。或者,如果您使用 RESTEasy 的 Spring 配置,则可以将其注入(inject) RestClientProxyFactoryBean。
这与绝对 5 秒超时并不完全相同,但根据您要完成的目标,调整这两个属性通常可以满足要求。
关于java - 来自客户端的超时 web 服务调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5965917/