web-dev-qa-db-fra.com

Zuul expire dans les requêtes de longue haleine

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 :)

36
EvilJinious1

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é.

30
spencergibb

Dans mon cas, j'ai dû changer la propriété suivante: 

zuul.Host.socket-timeout-millis=30000
28
acohen

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
20
codependent

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 
12
dseibert

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
10

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/**
2
jayant mishra

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!

0
rsb2097