我正在使用gcloud-node。
如果该主题已存在,则createTopic api将返回错误409。是否有可以在发布消息时隐式创建主题的标志,或者是否有API来检查主题是否已存在?
易于使用的getTopics API,通过响应主题数组进行迭代,并确定是否存在主题。只是想确保我不写东西,如果它已经存在。
答案 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)
});
}
});