我正在使用gcloud-node。
如果该主题已经存在,createTopic api 返回错误 409。是否有一个标志可以在发布消息时隐式创建一个主题,或者是否有一个 API 来检查一个主题是否已经存在?
它易于使用 getTopics API,遍历响应主题数组并确定主题是否存在。只是想确保我不写一些东西,如果它已经存在的话。
我正在使用gcloud-node。
如果该主题已经存在,createTopic api 返回错误 409。是否有一个标志可以在发布消息时隐式创建一个主题,或者是否有一个 API 来检查一个主题是否已经存在?
它易于使用 getTopics API,遍历响应主题数组并确定主题是否存在。只是想确保我不写一些东西,如果它已经存在的话。
是否有一个标志可以在发布消息时隐式创建一个主题,或者是否有一个 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
最近遇到了这个问题,接受的答案会让你陷入 http 429 错误。topic.get 是一个管理函数,其速率限制明显低于普通函数。你应该只在必要时打电话给他们,例如。发布期间出现错误代码 404(主题不存在),如下所示:
topic.publish(payload, (err) => {
if(err && err.code === 404){
topic.get({ autoCreate: true }, (err, topic) => {
topic.publish(payload)
});
}
});