3
votes

L'abonné Google pubsub golang cesse de recevoir de nouveaux messages publiés après avoir été inactif pendant quelques heures

J'ai créé un TOPIC dans google pubsub et un ABONNEMENT à l'intérieur du TOPIC, avec les paramètres suivants

 entrez la description de l'image ici

puis j'ai écrit un in go , en utilisant son Recevoir pour extraire et accuser réception des messages publiés

package main

import (
    ...
)

func main() {
    ctx := context.Background()

    client, err := pubsub.NewClient(ctx, config.C.Project)
    if err != nil {
       // do things with err
    }
    sub := client.Subscription(config.C.PubsubSubscription)
    err := sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {
        msg.Ack()
    })

    if err != context.Canceled {
      logger.Error(fmt.Sprintf("Cancelled: %s", err.Error()))
    }
    if err != nil {
      logger.Error(fmt.Sprintf("Error: %s", err.Error()))
    }
  }

Rien fantaisie, ça marche bien, mais après un certain temps (~ après 3 heures d'inactivité), il cesse de recevoir de nouveaux messages publiés, pas d'erreur (s), rien. Est-ce que je manque quelque chose?


0 commentaires

4 Réponses :


0
votes

Quelques modifications vous aideront à mieux analyser le problème: - Vérifier l'erreur de réception - Utilisez un contexte distinct pour recevoir

ctx := context.Background()
err := sub.Receive(ctx, func(ctx context.Context, msg *pubsub.Message) {
    msg.Ack()
})
if err != nil {
    log.Fatal(err)
}


1 commentaires

fait ça [j'ai mis à jour ma question], il ne montre aucune erreur, j'utilise aussi GRPC_GO_LOG_SEVERITY_LEVEL = info juste pour qu'il enregistre tout le reste



0
votes

Votre code fonctionne-t-il avant? J'ai des problèmes avec PubSub depuis aujourd'hui. Les méthodes comme get_topic () , create_topic () dans la bibliothèque Python PubSub cessent de fonctionner, mais je n'ai aucun problème avec l'envoi et l'extraction de messages. Hier, tout fonctionnait bien mais aujourd'hui non ...


1 commentaires

le code fonctionne juste, mais il arrête de tirer ou de recevoir des messages après un certain temps sans générer d'erreur. Mon équipe essaie actuellement la lib python comme alternative, vous mettra à jour



2
votes

En général, il peut y avoir plusieurs raisons pour lesquelles un abonné peut cesser de recevoir des messages:

  1. Si un abonné n'accuse pas ou n'acquiert pas les messages, les limites du contrôle de flux peuvent être atteintes, ce qui signifie qu'aucun autre message ne peut être remis. Cela ne semble pas être le cas dans votre cas particulier étant donné que vous acceptez immédiatement les messages.
  2. Si un autre abonné démarre pour le même abonnement, il se peut qu'il reçoive les messages. Dans ce scénario, on s'attendrait à ce que l'abonné reçoive un sous-ensemble de messages plutôt qu'aucun message du tout.
  3. Les éditeurs arrêtent simplement de publier des messages et il n'y a donc aucun message à recevoir. Si vous redémarrez l'abonné et qu'il recommence à recevoir des messages, ce n'est probablement pas le cas. Vous pouvez également vérifier qu'un backlog est en cours de création en consultant la métrique Stackdriver < / a> pour subscription / backlog_bytes .

Si votre problème n'entre pas dans l'une de ces catégories, il est préférable de contacter l'assistance Google Cloud avec le nom de votre projet, le nom du sujet et le nom de l'abonnement afin qu'ils puissent limiter le problème à votre code utilisateur , la bibliothèque cliente elle-même ou le service.


1 commentaires

Si ma limite de contrôle de flux est atteinte, comment puis-je le savoir? Je soupçonne que certains de mes messages fonctionnent depuis trop longtemps.



1
votes

Je vivais quelque chose de similaire et j'étais à peu près sûr qu'aucun autre abonné n'avait extrait ces messages.

Essayez ceci: allez au sujet, créez un nouvel abonnement faux (nommez-le comme vous voulez, car vous le supprimerez plus tard). Juste après avoir fait cela, le faux abonnement (que j'utilisais le exemple de client de code python auquel s'abonner) et le vrai recevait à nouveau des messages. Solution étrange, mais peut-être que cela a réveillé le sujet.

J'espère que quelqu'un de Google pourra nous donner un aperçu de ce qui se passe ici, mais je ne le paie certainement pas assez pour obtenir une assistance directe.


0 commentaires