我使用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/Sub subscription
或Storage bucket
或BigQuery dataset
等。
以下是文档中topic.get()
方法的链接:https://googlecloudplatform.github.io/gcloud-node/#/docs/v0.37.0/pubsub/topic?method=get
个人使用
const topic = pubsub.topic('topic-that-maybe-exists');
const [exists] = await topic.exists();
if (!exists) {
await topic.create();
}
最近遇到了这个问题,而接受的答案会使您遇到HTTP 429错误。的话题。Get是一个管理函数,它的速率限制比普通函数低得多。你应该只在必要的时候给他们打电话。发布时错误代码404(主题不存在),如下所示:
topic.publish(payload, (err) => {
if(err && err.code === 404){
topic.get({ autoCreate: true }, (err, topic) => {
topic.publish(payload)
});
}
});