Saltar al contenido principal
Cada rechazo lleva un ErrorDetail en los detalles del estado, y dice lo que POST /secure/send habría respondido a la misma petición. Así que todo lo escrito sobre los errores de REST se aplica también aquí: el código gRPC es la forma que tiene el transporte de decirlo, y ErrorDetail es el detalle.

Leer ErrorDetail

Viaja en el trailer estándar de estado enriquecido (grpc-status-details-bin). Léalo con la función auxiliar de su biblioteca: En un SendStream el mismo ErrorDetail llega en línea en el campo error del resultado, junto al code numérico. Ramifique según code, no según message. El mensaje es para una persona que lee un log y puede redactarse de otra forma en una versión posterior; los códigos forman parte del contrato congelado. Cuando reintentar ayuda, se empaqueta un google.rpc.RetryInfo estándar junto a ErrorDetail con el mismo retardo, para las bibliotecas cliente que lo respetan.

Envío

Nada rechazado se cobra, y nada rechazado cuenta para su límite de tasa.
RESOURCE_EXHAUSTED significa aquí dos cosas distintas. Con un ErrorDetail cuyo código es RATE_LIMITED, vaya más despacio. Sin ningún ErrorDetail, la petición era demasiado grande y nunca tendrá éxito tal como está.

OUTCOME_UNKNOWN: reintente solo con client_ref

OUTCOME_UNKNOWN es UNKNOWN, no UNAVAILABLE, a propósito. Puede que el mensaje esté en camino y ya se haya cobrado. Muchas bibliotecas cliente de gRPC reintentan UNAVAILABLE automáticamente, lo que aquí lo enviaría dos veces.Reintente un UNKNOWN solo con el mismo client_ref. Si el primer intento llegó, recibe de vuelta su message_id con duplicate: true y no se vuelve a enviar nada. Si no llegó, el reintento lo envía. Sin client_ref no hay reintento seguro: el message_id del detalle es el que debe vigilar en un acuse.
Por el mismo motivo, si configura una política de reintentos en su biblioteca cliente (un retryPolicy en la configuración de servicio de gRPC), incluya en ella UNAVAILABLE y RESOURCE_EXHAUSTED y nunca UNKNOWN.

Sesiones y la propia API

UNAUTHENTICATED cubre tres situaciones distintas, así que lea ErrorDetail.code: solo SESSION_EXPIRED se resuelve volviendo a iniciar sesión. Consulte Autenticación y sesiones.

Acuses

Un Ack que nombra un acuse que ya no existe no es un error: se cuenta en already_gone. Consulte Acuses de entrega por gRPC.

Relacionado

Errores de la API REST

Los mismos rechazos, como estados HTTP.

Gestión de errores

Construir para el acuse en lugar de para la respuesta.