zuul tutorial starter springframework oss org feign eureka enablefeignclients spring-cloud netflix-zuul

spring cloud - tutorial - Zuul agota el tiempo en solicitudes largas



spring-cloud-starter-netflix-zuul (7)

Estoy usando una aplicación en la nube de front-end (micro servicio) que actúa como un proxy zuul (@EnableZuulProxy) para enrutar las solicitudes desde una fuente externa a otros micro servicios internos escritos usando la nube de primavera (arranque de primavera).
El servidor zuul sale directamente de las aplicaciones en la sección de muestras

@SpringBootApplication @Controller @EnableZuulProxy @EnableDiscoveryClient public class ZuulServerApplication { public static void main(String[] args) { new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args); } }

Ejecuté este conjunto de servicios localmente y todo parece funcionar bien, pero si lo ejecuto en una red con cierta carga o a través de una VPN, entonces empiezo a ver los errores de reenvío de zuul, que veo como tiempos de espera del cliente en los registros

¿Hay alguna forma de cambiar el tiempo de espera en los forwards zuul para que pueda eliminar este problema de mis preocupaciones inmediatas? ¿Qué configuración de parámetros accesibles hay para esto?

Estoy en medio de un lanzamiento y esto acaba de aparecer :)


En mi caso, tuve que cambiar la siguiente propiedad:

zuul.host.socket-timeout-millis=30000


Esto funcionó para mí, tuve que establecer la conexión y el tiempo de espera del socket en la application.yml :

zuul: host: connect-timeout-millis: 60000 # starting the connection socket-timeout-millis: 60000 # monitor the continuous incoming data flow


He experimentado el mismo problema: en solicitudes largas, el comando hystrix de Zuul mantuvo el tiempo de espera después de alrededor de un segundo a pesar de establecer ribbon.ReadTimeout=10000 .

Lo resolví desactivando los tiempos de espera por completo:

hystrix: command: default: execution: timeout: enabled: false

Una alternativa que también funciona es cambiar la estrategia de aislamiento Hystrix de Zuul a THREAD:

hystrix: command: default: execution: isolation: strategy: THREAD thread: timeoutInMilliseconds: 10000


Las propiedades para establecer son: ribbon.ReadTimeout en general y <service>.ribbon.ReadTimeout para un servicio específico, en milisegundos. La wiki de Ribbon tiene algunos ejemplos. Este javadoc tiene los nombres de las propiedades.


Si Zuul utiliza el descubrimiento de servicios, debe configurar estos tiempos de espera con las ribbon.ReadTimeout y ribbon.SocketTimeout Ribbon.

Si ha configurado rutas Zuul especificando URL, necesita usar zuul.host.connect-timeout-millis y zuul.host.socket-timeout-millis

por rutas me refiero

zuul: routes: dummy-service: path: /dummy/**


Solo estas configuraciones en application.yml funcionaron para mí:

ribbon: ReadTimeout: 90000 ConnectTimeout: 90000 eureka: enabled: true zuul: host: max-total-connections: 1000 max-per-route-connections: 100 semaphore: max-semaphores: 500 hystrix: command: default: execution: isolation: thread: timeoutInMilliseconds: 1000000

Espero que ayude a alguien!


Tuve que modificar dos tiempos de espera para obligar a zuul a detener el tiempo de solicitudes de larga ejecución. Incluso si los tiempos de espera de hystrix están desactivados, la cinta aún expirará.

hystrix: command: default: execution: timeout: enabled: false ribbon: ReadTimeout: 100000 ConnectTimeout: 100000