Zuul timing dans les demandes de longue durée
J'utilise une application spring cloud frontale (micro service) agissant en tant que proxy zuul (@EnableZuulProxy) pour acheminer les demandes d'une source externe vers d'autres services micro internes écrits à l'aide de Spring cloud (Spring boot).
Le serveur zuul est tout droit sorti des applications dans 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 couru cet ensemble de services localement et tout semble bien fonctionner mais si je l'exécute sur un réseau avec une charge ou via un VPN, je commence à voir des erreurs de transfert zuul que je vois comme des délais d'attente du client dans les journaux
Est-il possible de changer le délai d'attente sur les Zuul forwards afin que je puisse éliminer ce problème de mes préoccupations immédiates. Quels paramètres de paramètres accessibles sont là pour cela.
Je suis au milieu d'une version et cela vient d'apparaître:)
7 réponses
Les propriétés à définir sont: {[0] } en général et <service>.ribbon.ReadTimeout
pour un service spécifique, en millisecondes. Le wiki ruban 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 les requêtes longues, la commande hystrix de Zuul a gardé le timing après environ une seconde malgré le réglage 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'isolement Hystrix de Zuul pour THREAD:
hystrix:
command:
default:
execution:
isolation:
strategy: THREAD
thread:
timeoutInMilliseconds: 10000
J'ai dû modifier deux délais d'attente pour forcer zuul à arrêter de chronométrer les demandes de longue durée. Même si les délais d'attente hystrix sont désactivés, le ruban reste le délai d'attente.
hystrix:
command:
default:
execution:
timeout:
enabled: false
ribbon:
ReadTimeout: 100000
ConnectTimeout: 100000
Cela a fonctionné pour moi, j'ai dû 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 d'attente avec les propriétés du ruban ribbon.ReadTimeout
et ribbon.SocketTimeout
.
Si vous avez configuré Zuul itinéraires en spécifiant les Url, vous devez utiliser zuul.host.connect-timeout-millis
et zuul.host.socket-timeout-millis
Par routes je veux dire
zuul:
routes:
dummy-service:
path: /dummy/**
Seuls ces 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!