来自客户端的超时webservice呼叫

我正在使用RestEasy Client调用Web服务。 一个要求是,如果呼叫运行超过5秒,则中止/超时。 我如何使用RestEasy Client实现这一目标? 我只看到服务器端超时,即如果在一定时间内未满足,则Rest Easy websevice将超时请求。

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对象。 或者,如果您使用REST配置的Spring配置,则可以将其注入RestClientProxyFactoryBean。

它与绝对的5秒超时不完全相同,但取决于您要完成的任务,调整这两个属性通常会填补账单。

对于Apache HttpClient版本> = 4.0,Carter Page的答案是正确的。

对于早期版本的HttpClient(例如3.1),代码略有不同:

 HttpClient httpClient = new HttpClient(); HttpConnectionParams params = httpClient.getHttpConnectionManager().getParams(); params.setConnectionTimeout(connectionTimeoutMillis); params.setSoTimeout(socketTimeoutMillis); ClientExecutor executor = new ApacheHttpClientExecutor(httpClient); MyService service = ProxyFactory.create(MyService.class, URL, executor); 

如果您更喜欢构建器模式,请按以下步骤操作:

  Client client = new ResteasyClientBuilder() .establishConnectionTimeout(5, TimeUnit.SECONDS) .socketTimeout(5, TimeUnit.SECONDS) .build(); 

取自这里: http : //blog.eisele.net/2014/12/setting-timeout-for-jax-rs-20-resteasy-client.html

如果您正在使用具有spring集成( 文档 )的resteasy客户端框架,则以下是设置超时值的方法: