Soluciona problemas

Obtén información sobre los pasos para solucionar problemas que pueden servirte si tienes dificultades con Pub/Sub.

No se puede crear una suscripción

Comprueba si completaste estos pasos:

  • Especificaste un nombre de suscripción en el campo name. Para la versión v1beta2 y posteriores, el nombre de la suscripción debe tener el formato projects/project-identifier/subscriptions/subscription-name.
  • Especificaste el nombre de un tema existente al que deseas suscribirte, en el campo topic. Para la versión v1beta2 y posteriores, el nombre del tema debe tener el formato projects/project-identifier/topics/topic-name.
  • Especificaste https:// en minúsculas (ni http:// ni HTTPS://) como protocolo para tu URL de recepción en el campo pushEndpoint.

403 (Forbidden) error

Si recibes este error, haz lo siguiente:

  • Asegúrate de haber habilitado la API de Pub/Sub en la consola de Google Cloud.
  • Asegúrate de que la cuenta principal que realiza la solicitud tenga los permisos necesarios en los recursos relevantes de la API de Pub/Sub, en especial, si usas la API de Pub/Sub para la comunicación entre proyectos.
  • Si usas Dataflow, asegúrate de que <projectId>@cloudservices.gserviceaccount.com y la cuenta de servicio de Compute Engine <projectId>-compute@developer.gserviceaccount.com tengan los permisos necesarios en el recurso de la API de Pub/Sub relevante. Consulta Seguridad y permisos de Cloud Dataflow para obtener más información.
  • Si usas App Engine, revisa la página de permisos de tu proyecto para ver si alguna cuenta de servicio de App Engine aparece con la función de Editor. Si no es así, agrega tu cuenta de servicio de App Engine con la función de Editor. Por lo general, la cuenta de servicio de App Engine tiene el formato <project-id>@appspot.gserviceaccount.com.

Detecta mensajes duplicados y fuerza reintentos

Cuando no confirmas un mensaje antes de que venza el plazo de confirmación, Pub/Sub vuelve a enviar el mensaje. Como resultado, Pub/Sub puede enviar mensajes duplicados. Usa Cloud Monitoring para supervisar las operaciones de confirmación con el código de respuesta expired para detectar esta condición. Para obtener estos datos, selecciona la métrica subscription/expired_ack_deadlines_count.

Usar Cloud Monitoring para buscar plazos de confirmación de recepción de mensajes vencidos

Para reducir la tasa de duplicación, extiende el plazo del mensaje.

  • Las bibliotecas cliente manejan la extensión de plazos de forma automática, pero debes tener en cuenta que existen límites máximos predeterminados para la extensión que se pueden configurar.
  • Si creas tu propia biblioteca cliente, usa el método modifyAckDeadline para extender el plazo de confirmación.

Como alternativa, para forzar a Pub/Sub a reintentar un mensaje, establece modifyAckDeadline en 0.

Uso de operaciones administrativas excesivas

Si descubres que consumes demasiado tu cuota para operaciones administrativas, es posible que debas reestructurar el código. A modo de ilustración, considera este seudocódigo. En este ejemplo, se usa una operación administrativa (GET) para verificar la presencia de una suscripción antes de que intente consumir sus recursos. GET y CREATE son operaciones administrativas:


    if !GetSubscription my-sub {
     CreateSubscription my-sub
    }
    Consume from subscription my-sub
            

Una opción más eficaz es intentar consumir los mensajes de la suscripción (siempre que puedas estar seguro del nombre de la suscripción). Con este enfoque optimista, solo obtienes o creas la suscripción si hay un error. Considera el siguiente ejemplo:

    try {
      Consume from subscription my-sub
    } catch NotFoundError {
      CreateSubscription my-sub
      Consume from subscription my-sub
    }