4

我正在使用gcloud-node

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

它易于使用 getTopics API,遍历响应主题数组并确定主题是否存在。只是想确保我不写一些东西,如果它已经存在的话。

4

2 回答 2

2

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

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

但是,gcloud-node 确实有一些方法可以在必要时创建主题:

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

事实上,几乎所有 gcloud-node 对象都具有与get上述相同的方法,即 Pub/Subsubscription或 Storagebucket或 BigQuerydataset等。

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

于 2016-08-10T16:00:00.227 回答
1

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

topic.publish(payload, (err) => {
  if(err && err.code === 404){
    topic.get({ autoCreate: true }, (err, topic) => {
      topic.publish(payload)
    });
  }
});
于 2017-06-22T16:33:58.343 回答