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
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.
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>
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);
Si prefiere el Builder aquí es cómo se hace:
Client client = new ResteasyClientBuilder()
.establishConnectionTimeout(5, TimeUnit.SECONDS)
.socketTimeout(5, TimeUnit.SECONDS)
.build();
tomado de aquí: http://blog.eisele.net/2014/12/setting-timeout-for-jax-rs-20-resteasy-client.html
- 1. Web Charting, lado del servidor o del lado del cliente?
- 2. Devolución de llamada del lado del cliente en GWT
- 3. Llamadas al servicio web SOAP desde Javascript
- 4. Error del cliente del servicio web CXF
- 5. Cómo: Servicio web y manejo de tiempos de espera del cliente en el servicio web?
- 6. XML desde una llamada de servicio web
- 7. cliente web para servicio web
- 8. acceder al servicio web desde jQuery - dominios
- 9. Evento del servidor ASP.net manejado desde el lado del cliente
- 10. Enviar un archivo pdf al cliente desde el servidor a través del servicio web
- 11. Método no estático en el lado del servidor desde el lado del cliente usando JavsScript
- 12. ¿Cómo se pueden consumir los servicios web remotos desde un script del lado del cliente?
- 13. .net ejemplo de uso de certificados de cliente en la llamada al servicio web?
- 14. Idiomas del lado del cliente
- 15. Manejo del reinicio del servicio WCF en el lado del cliente
- 16. WCF Servicio de Windows TimeOut
- 17. Sesiones del lado del cliente
- 18. La llamada al servicio web devuelve el error 500
- 19. Configurar cookies accesibles desde el lado del cliente en Express
- 20. ¿Puedo enviar un objeto desde javascript del lado del cliente al código del lado del servidor a través de ASP.NET?
- 21. Paginación del lado del cliente con jqGrid
- 22. ¿Debo hacer solicitudes de API del lado del servidor o del lado del cliente?
- 23. Registradores en el lado del cliente GWT
- 24. Cliente de servicio web Python
- 25. Método del lado del servidor y del lado del cliente
- 26. AXIS contra JAX-WS para el cliente del servicio web
- 27. Ruby: del lado del cliente o del lado del servidor?
- 28. llamada dominios con jQuery jsonp al servicio web ASP.NET
- 29. Llamando al servicio web desde C++
- 30. Cookies solo del lado del cliente
¿Cómo lo manejamos? Quiero decir que quiero iniciar sesión si se produce el tiempo de espera. – Bidisha