2011-05-11 14 views
9

Llamo a un servicio web utilizando RestEasy Client. Un requisito es abortar/agotar el tiempo de espera de la llamada si se ejecuta durante más de 5 segundos. ¿Cómo lograría esto con RestEasy Client? Solo he visto el tiempo de espera del lado del servidor, es decir, el servicio web Rest Easy interrumpirá la solicitud si no se cumple en un tiempo determinado.Llamada al servicio web de Timeout desde el lado del cliente

Respuesta

11

Un cliente RESTEasy generalmente utiliza Apache HttpClient para manejar la conversación de red.

Puede anular las propiedades HttpClient con sus propios parámetros de tiempo de espera personalizado:

DefaultHttpClient httpClient = new DefaultHttpClient(); 
HttpParams params = httpClient.getParams(); 
HttpConnectionParams.setConnectionTimeout(params, connectionTimeoutMillis); 
HttpConnectionParams.setSoTimeout(params, socketTimeoutMillis); 

El primer parámetro le permite especificar el tiempo de espera de establecer la conexión inicial y el segundo le permite especificar el periodo máximo de tiempo en el cual un socket esperará mientras no se envían datos.

Puede utilizar el HttpClient modificado para construir su ClientExecutor:

ClientExecutor executor = new ApacheHttpClient4Executor(httpClient); 

que se pueden utilizar a su vez para construir un objeto ClientRequest. O puede inyectarlo en RestClientProxyFactoryBean si está utilizando una configuración de Spring para RESTEasy.

No es exactamente lo mismo que un tiempo de espera absoluto de 5 segundos, pero dependiendo de lo que esté tratando de lograr, ajustar estas dos propiedades generalmente llenará la factura.

+0

¿Cómo lo manejamos? Quiero decir que quiero iniciar sesión si se produce el tiempo de espera. – Bidisha

0

Si está utilizando marco cliente resteasy con la integración de la primavera (documentation), la siguiente es la manera de establecer los valores de tiempo de espera:

<bean id="httpClient" class="org.apache.http.impl.client.DefaultHttpClient"> 
    <property name="params" ref="httpParams"/> 
</bean> 

<bean id="httpParams" class="org.apache.http.params.BasicHttpParams"/> 

<bean id="httpConnectionParams" class="org.apache.http.params.HttpConnectionParamBean"> 
    <constructor-arg ref="httpParams"/> 
    <property name="connectionTimeout" value="10000"/> 
    <property name="soTimeout" value="30000"/> 
</bean> 
2

La respuesta por Carter página es correcta para Apache HttpClient version> = 4.0.

Para versiones anteriores de HttpClient (por ejemplo 3.1) el código es ligeramente diferente:

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); 
Cuestiones relacionadas