Google PubSub 在获取新创建的主题时抛出 "Not found"

Google PubSub throw "Not found" when getting a newly created topic

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

问题是我无法创建链接到新创建主题的订阅,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 日志时,创建的主题是在订阅 oO

之后创建的

我的 Promise 数组首先注入主题,然后是订阅承诺。

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

它甚至没有显示在 google 日志中,我认为他们在 API 上有一个缓存,只是 return 新处理的数据而无需重新尝试。

你有想法吗?

谢谢:)

主题:

订阅错误:

编辑:

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

所以,当我像那样创建我的 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 在 处理请求之前 发送了 resolve Promise。 因此,当您创建订阅时,他无法找到主题。 但是我无法验证这一点,有人知道为什么吗??!!

我想删除此超时以获得更不可知的实现。 更奇怪的是,我发现如果你只是在 for 循环中调用 promises,不需要超时!

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