簡體   English   中英

Google Cloud Pub/Sub 獲取或創建訂閱

[英]Google Cloud Pub/Sub get or create subscription

我有兩個工作代碼如下。

這將獲得現有訂閱:

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命令來獲取訂閱並在必要時創建它?

正確的方式

const subscription = this.topic.subscription("name");
const [exists] = await subscription.exists();
if (!exists) {
   await subscription.create();
}

最好的方法似乎是訂閱感興趣的主題,如果未列出,則它不存在,因此創建它,否則只需獲取它

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')
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM