Google Cloud Pub/Sub 获取或创建订阅
Posted
技术标签:
【中文标题】Google Cloud Pub/Sub 获取或创建订阅【英文标题】:Google Cloud Pub/Sub get or create subscription 【发布时间】:2021-12-12 07:43:32 【问题描述】:我有 2 段 WORKING 代码如下。
这将获得一个现有的订阅:
this.pubSubClient = new PubSub()
sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
创建并获取一个不存在的订阅:
this.pubSubClient = new PubSub()
this.topic = this.pubSubClient.topic(appConfig.pubSub.topic)
[sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
这一切都很好。但是,如果订阅不存在(在一个环境中),第一段代码会导致问题,如果订阅确实存在(在另一个环境中),第二段代码会导致问题。
所以我尝试过这样做:
let sub
try
sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
console.log('using existing subscription')
catch (err)
[sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
console.log('using created subscription')
但上面的方法不起作用,因为第一行代码永远不会触发错误。它只是没有收到任何消息。有没有我可以使用的getOrCreateSubscription
命令获取订阅并在必要时创建它?
TIA
【问题讨论】:
【参考方案1】:最好的方法似乎是订阅感兴趣的主题,如果它没有列出,那么它不存在,所以创建它,否则就得到它
const [subscriptions] = await this.topic.getSubscriptions()
const subs = subscriptions.map(subscription => last(subscription.name.split('/')))
const subExists = subs.includes(appConfig.pubSub.subscription)
let sub
if (subExists)
sub = this.pubSubClient.subscription(appConfig.pubSub.subscription)
console.log('using existing subscription')
else
[sub] = await this.topic.createSubscription(appConfig.pubSub.subscription)
console.log('using created subscription')
FYI last 从 lodash 导入并返回数组中的最后一项
【讨论】:
以上是关于Google Cloud Pub/Sub 获取或创建订阅的主要内容,如果未能解决你的问题,请参考以下文章
从 Google Cloud Pub/Sub 而不是 base64 获取未编码的数据
无法按日期从 Google Cloud Pub/Sub 功能中的 Firebase 获取文档
如何通过 Google Cloud Monitoring JAVA 客户端库获取 Pub/Sub 订阅中未确认消息的数量
Google Cloud 上使用 Pub/Sub 的主/从模式