Passer au contenu principal
Chaque refus porte un ErrorDetail dans les détails du statut, et il dit ce qu’aurait répondu POST /secure/send pour la même requête. Tout ce qui est écrit sur les erreurs REST s’applique donc ici aussi — le code gRPC est la manière dont le transport le dit, et ErrorDetail en est le détail.

Lire ErrorDetail

Il voyage dans le trailer de statut enrichi standard (grpc-status-details-bin). Lisez-le avec l’utilitaire de votre bibliothèque : Sur un SendStream, le même ErrorDetail arrive en ligne dans le champ error du résultat, à côté du code numérique. Branchez sur code, pas sur message. Le message est destiné à une personne qui lit un log et peut être formulé différemment dans une version ultérieure ; les codes font partie du contrat figé. Quand un retry aide, un google.rpc.RetryInfo standard est empaqueté à côté de ErrorDetail avec le même délai, pour les bibliothèques clientes qui le respectent.

Envoi

Rien de refusé n’est débité, et rien de refusé ne compte dans votre limite de débit.
RESOURCE_EXHAUSTED signifie ici deux choses différentes. Avec un ErrorDetail dont le code est RATE_LIMITED, ralentissez. Sans aucun ErrorDetail, la requête était trop grande et ne réussira jamais telle quelle.

OUTCOME_UNKNOWN, réessayer uniquement avec client_ref

OUTCOME_UNKNOWN est UNKNOWN, pas UNAVAILABLE, à dessein. Le message est peut-être en route et a été débité. De nombreuses bibliothèques clientes gRPC réessaient UNAVAILABLE automatiquement — ce qui ici l’enverrait deux fois.Ne réessayez un UNKNOWN qu’avec le même client_ref. Si la première tentative est passée, vous récupérez son message_id avec duplicate: true et rien n’est renvoyé. Si elle n’est pas passée, le retry l’envoie. Sans client_ref, il n’y a pas de retry sûr : le message_id du détail est celui à surveiller sur un accusé.
Pour la même raison, si vous configurez une politique de retry dans votre bibliothèque cliente (un retryPolicy de service config gRPC), listez-y UNAVAILABLE et RESOURCE_EXHAUSTED et jamais UNKNOWN.

Les sessions et l’API elle-même

UNAUTHENTICATED couvre trois situations différentes, donc lisez ErrorDetail.code : seul SESSION_EXPIRED se règle en se reconnectant. Voir Authentification et sessions.

Accusés

Un Ack qui nomme un accusé déjà disparu n’est pas une erreur — il est compté dans already_gone. Voir Accusés de livraison sur gRPC.

Voir aussi

Erreurs de l'API REST

Les mêmes refus, sous forme de statuts HTTP.

Gérer les erreurs

Construire pour l’accusé plutôt que pour la réponse.