获取新创建的主题时,Google PubSub会抛出“未找到”

时间:2018-06-13 19:01:52

标签: node.js async-await gcloud google-cloud-pubsub

我有一个在我的服务器启动时创建主题和订阅的功能。

问题是我无法创建链接到新创建主题的订阅,Google PubSub服务器会抛出NOT FOUND错误。

我甚至在主题创建后添加了20秒的超时但没有改变T_T

export async function init() {
  // promises.topics is an array of promises
  const topics = await Promise.all(promises.topics);
  console.log('YEAH !!! TOPIC IS GOOD !', topics);
  // That works ! And it is created in my remote google PubSub
  await timeout(20000);

  console.log('Lets Check if it exists !!!');

  // promises.getTopics is an array of :
  // getTopics.push(pubSubClient.topic(topic.name).get());
  // That throws a NOT FOUND
  const get = await Promise.all(promises.getTopics);
  // Failes because Topics are not found
  const subscriptions = await Promise.all(promises.subscriptions);
}

当我签入Google日志时,创建的主题将在订阅之后创建

My Promise数组注入第一个主题然后订阅承诺。

添加每2秒重试10次的重试功能时,它也不起作用。

它甚至没有显示在谷歌日志中,我认为他们的API只有一个缓存,只返回新处理的数据而不重新尝试。

你有什么想法吗?

谢谢:)

主题: enter image description here

SUBSCRIPTION错误:

enter image description here

编辑:

我通过在promise数组中推送主题承诺创建后,通过添加超时('2000')来解决问题。

1 个答案:

答案 0 :(得分:1)

所以,当我像这样创建我的Promise数组时:

 async function constructPromises() {
  const topics = [];
  const subscriptions = [];
   for (const topic of pubSubConfig.topics) {      
      subscriptions.push(createTopic(topic.name));

      // Have to add this timeout, otherwise the topic is not found oO
      await timeout(1000);
   }
   for (const topic of pubSubConfig.topics) {
     for (const sub of topic.subscriptions) {        
       subscriptions.push(createSubscription(topic.name, sub));
     }       
   }
   return { topics, subscriptions };
}

我不得不添加此超时,否则gcloud无法找到主题。

我认为这是因为gcloud在处理请求之前发送了决心Promise 。 因此,当您创建订阅时,他无法找到该主题。 但我无法验证这一点,有谁知道为什么?? !!

我想删除此超时以使其具有更不可知的实现。 更奇怪的是,我发现如果你只是在for循环中调用promise,就不需要超时了!

for (const topic of pubSubConfig.topics) {
    const topicResponse = await createTopic(topic.name);
    topics.push(topicResponse);
    for (const sub of topic.subscriptions) {
      const subResponse = await createSubscription(topic.name, sub);
      subscriptions.push(subResponse);
    }
  }
  return { topics, subscriptions };
}

所以我的问题已经解决了,但我脑子里仍然有这个问题:P