gcloud检查主题是否存在以及重用主题的能力

时间:2016-08-10 04:07:14

标签: google-cloud-pubsub gcloud-node

我正在使用gcloud-node

如果该主题已存在,则createTopic api将返回错误409。是否有可以在发布消息时隐式创建主题的标志,或者是否有API来检查主题是否已存在?

易于使用的getTopics API,通过响应主题数组进行迭代,并确定是否存在主题。只是想确保我不写东西,如果它已经存在。

2 个答案:

答案 0 :(得分:1)

  

是否有可以在发布消息时隐式创建主题的标志,或者是否有API来检查主题是否已存在?

我相信您遇到的问题是,如果将消息发布到不存在的主题,则会立即删除该消息。因此,它不会徘徊并等待创建订阅;它会消失。

但是,gcloud-node确实有必要创建主题的方法:

library(dplyr)
library(gridExtra)
p <-
  df %>%
  filter(variable == 'Crown_Class') %>%
  ggplot() +
  geom_bar(aes(x = Species, fill = value)) +
  facet_wrap(~ variable)

q <-
  df %>%
  filter(variable == 'Life_class') %>%
  ggplot() +
  geom_bar(aes(x = Species, fill = value)) +
  facet_wrap(~ variable)

r <-
  df %>%
  filter(variable == 'Stem_Category') %>%
  ggplot() +
  geom_bar(aes(x = Species, fill = value)) +
  facet_wrap(~ variable)

grid.arrange(p, q, r)

事实上,几乎所有的gcloud-node对象都有var topic = pubsub.topic('topic-that-maybe-exists'); topic.get({ autoCreate: true }, function(err, topic) { // topic.publish(... }); 方法,它的工作方式与上面相同,即Pub / Sub get或存储subscription或BigQuery bucket等等。

以下是文档中dataset方法的链接:https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.37.0/pubsub/topic?method=get

答案 1 :(得分:0)

最近碰到了这个问题,接受的答案会让你陷入http 429错误。 topic.get是一个管理功能,其速率限制明显低于普通功能。你应该只在必要时打电话给他们,例如。发布期间的错误代码404(主题不存在),如下所示:

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