3 votes

gRPC DEADLINE_EXCEEDED même que le serveur est en marche et que

J'ai deux microservices qui communiquent entre eux par l'intermédiaire de gRPC , A est le client RPC et B est le serveur RPC, tous deux écrits en NodeJS à l'aide de grpc Module NPM.

Tout fonctionne bien jusqu'à ce que, à un moment donné, de manière inattendue A cesser de pouvoir envoyer des demandes à B il échoue à cause d'un timeout (5s) et lance cette erreur :

Error: Deadline Exceeded

Les deux microservices sont des conteneurs Docker, fonctionnent sur AWS ECS et communiquent via AWS ELB (pas ALB car il ne supporte pas HTTP2 et quelques autres problèmes).

J'ai essayé d'exécuter telnet de A à la BLE de B La connexion s'est faite sans problème, tant à partir de l'instance EC2 que de la tâche ECS en cours d'exécution (le conteneur Docker lui-même), mais l'application NodeJS dans le conteneur Docker ne s'est toujours pas connectée. A ne peut pas atteindre l'application NodeJS dans B en utilisant la connexion gRPC.

La seule façon de résoudre ce problème est d'arrêter et de démarrer les tâches ECS, puis de A réussir à se connecter à B (jusqu'à la prochaine fois que le même scénario se reproduira de manière inattendue), mais ce n'est évidemment pas une solution.

Quelqu'un a-t-il été confronté à ce genre de problème ?

0voto

Alex Borysov Points 241

Utilisez-vous l'API unaire ou le streaming ? Fixez-vous une date limite ? La date limite gRPC est par flux, donc dans le cas du streaming, si vous fixez une date limite de X millisecondes, vous obtiendrez DEADLINE_EXCEEDED X millisecondes après que vous ayez défini la date limite. ouvert un flux (sans envoyer ni recevoir de messages !). Et vous l'aurez toujours pour ce flux, le seul moyen de vous en débarrasser est de rouvrir un flux.

0voto

jdwyah Points 568

J'ai constaté que je devais créer un nouveau stub, mais aussi recréer la connexion après quelques erreurs pour qu'elle se reconnecte. (fonctionne également dans ECS)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X