2016-08-10 2 views
1

Я использую gcloud-node.gcloud проверить, существует ли тема и возможность повторного использования темы

createTopic api возвращает ошибку 409, если эта тема уже существует. Есть ли флаг, который может неявно создавать тему при публикации сообщения или существует ли API для проверки существующей темы?

Его простой в использовании API getTopics, итерация через массив ответов и определение того, существует ли тема. Просто хотел удостовериться, что я что-то не написал, если он уже существует.

ответ

1

Есть ли флаг, который может неявно создавать тему при публикации сообщения или существует ли API для проверки существующей темы?

Я считаю, что проблема, с которой вы столкнетесь, заключается в том, что если сообщение опубликовано в тему, которая не существует, она немедленно удаляется. Таким образом, он не будет зависать и ждать, пока будет создана подписка; он просто исчезнет.

Однако gcloud-узел имеет методы, которые будут создавать тему, если необходимо:

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

В самом деле, почти все объекты gcloud-узел есть метод get, который будет работать точно так же, как и выше, т.е. паб/Sub subscription или хранение bucket или BigQuery dataset и т.д.

Вот ссылка на метод topic.get() в документации: https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.37.0/pubsub/topic?method=get

+0

звучит хорошо, спасибо. – Sahas

0

натолкнулся на это недавно, и принятый ответ запускает вас в ошибки http 429. topic.get - это административная функция, которая имеет значительно более низкий предел скорости, чем обычные функции. Вы должны только называть их, когда это необходимо, например. код ошибки 404 во время публикации (тема не существует), примерно так:

topic.publish(payload, (err) => { 
    if(err && err.code === 404){ 
    topic.get({ autoCreate: true }, (err, topic) => { 
     topic.publish(payload) 
    }); 
    } 
}); 
Смежные вопросы