J'utilise une application frontale Spring Cloud (micro service) servant de proxy zuul (@EnableZuulProxy) pour acheminer les demandes d'une source externe vers d'autres micro-services internes écrits à l'aide de Spring Cloud (Spring Boot).
Le serveur zuul est directement sorti des applications de la section samples
@SpringBootApplication
@Controller
@EnableZuulProxy
@EnableDiscoveryClient
public class ZuulServerApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulServerApplication.class).web(true).run(args);
}
}
J'ai exécuté cet ensemble de services localement et tout semble bien fonctionner, mais si je l'exécute sur un réseau chargé ou via un VPN, les erreurs de transmission zuul commencent à apparaître, ce que je vois comme des délais d'attente client dans les journaux.
Existe-t-il un moyen de modifier le délai d’attente sur les transferts de zuul afin que je puisse éliminer ce problème de mes préoccupations immédiates. Quels paramètres accessibles y a-t-il pour cela?.
Je suis au milieu d'une publication et cela vient d'arriver :)
Les propriétés à définir sont: ribbon.ReadTimeout
en général et <service>.ribbon.ReadTimeout
pour un service spécifique, en millisecondes. Le wiki Ribbon a quelques exemples. Ce javadoc a les noms de propriété.
Dans mon cas, j'ai dû changer la propriété suivante:
zuul.Host.socket-timeout-millis=30000
J'ai rencontré le même problème: dans de longues requêtes, la commande hystrix de Zuul n'arrêtait pas de s'écouler au bout d'environ une seconde malgré le réglage de ribbon.ReadTimeout=10000
.
Je l'ai résolu en désactivant complètement les délais d'attente:
hystrix:
command:
default:
execution:
timeout:
enabled: false
Une alternative qui fonctionne également est de changer la stratégie d'isolation Hystrix de Zuul en Thread:
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 10000
J'ai dû modifier deux délais d'attente pour forcer zuul à cesser de traiter les demandes de longue durée. Même si les délais d'attente hystrix sont désactivés, le ruban expire toujours.
hystrix:
command:
default:
execution:
timeout:
enabled: false
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000
Cela a fonctionné pour moi, je devais définir le délai de connexion et de socket dans le application.yml
:
zuul:
Host:
connect-timeout-millis: 60000 # starting the connection
socket-timeout-millis: 60000 # monitor the continuous incoming data flow
Si Zuul utilise la découverte de service, vous devez configurer ces délais avec les propriétés de ruban ribbon.ReadTimeout
et ribbon.SocketTimeout
.
Si vous avez configuré les itinéraires Zuul en spécifiant des URL, vous devez utiliser zuul.Host.connect-timeout-millis
et zuul.Host.socket-timeout-millis
.
par des itinéraires que je veux dire
zuul:
routes:
dummy-service:
path: /dummy/**
Seuls les paramètres sur application.yml
ont fonctionné pour moi:
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
J'espère que ça aide quelqu'un!