2016-08-10 1 views
1

Ich benutze gcloud-node.gcloud überprüfen, ob ein Thema existiert und die Fähigkeit, das Thema

createTopic API gibt Fehler 409 zurück, wenn dieses Thema bereits existiert. Gibt es ein Flag, das beim Veröffentlichen einer Nachricht implizit ein Thema erstellen kann? Gibt es eine API, die prüft, ob bereits ein Thema existiert?

Die einfach zu verwendende getTopics-API, iterieren durch das Antwort-Topic-Array und bestimmen, ob ein Thema existiert. Ich wollte nur sicherstellen, dass ich nichts schreibe, wenn es schon existiert.

Antwort

1

Gibt es ein Flag, das implizit ein Thema beim Veröffentlichen einer Nachricht erstellen kann. Gibt es eine API, um zu überprüfen, ob ein Thema bereits existiert?

Ich glaube, das Problem, das Sie den Weg laufen, ist, dass, wenn eine Nachricht zu einem Thema veröffentlicht, das nicht existiert, es fallen gelassen wird sofort. Also, es wird nicht herumhängen und warten auf ein Abonnement erstellt werden; Es wird einfach verschwinden.

jedoch gcloud-Knoten hat Methoden, die ein Thema bei Bedarf schaffen:

var topic = pubsub.topic('topic-that-maybe-exists'); 
topic.get({ autoCreate: true }, function(err, topic) { 
    // topic.publish(... 
}); 

In der Tat, fast alle gcloud-Knoten Objekte haben die get Methode, die wie oben in der gleichen Weise funktionieren wird, das heißt ein Pub/Sub subscription oder ein Speicher bucket oder ein BigQuery dataset usw.

Hier ist ein Link auf die topic.get() Methode in der Dokumentation: https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.37.0/pubsub/topic?method=get

+0

klingt gut, danke. – Sahas

0

lief vor kurzem in diese und die akzeptierte Antwort führt Sie in http 429 Fehler. topic.get ist eine administrative Funktion, die ein wesentlich niedrigeres Ratenlimit als normale Funktionen hat. Sie sollten sie nur bei Bedarf anrufen, z. Fehlercode 404 während der Veröffentlichung (Thema existiert nicht), etwas wie so:

topic.publish(payload, (err) => { 
    if(err && err.code === 404){ 
    topic.get({ autoCreate: true }, (err, topic) => { 
     topic.publish(payload) 
    }); 
    } 
}); 
Verwandte Themen