node.js - 获取新创建的主题时,Google PubSub 抛出 "Not found"

标签 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 日志时,创建的主题是在订阅 oO 之后创建的

我的 Promise 数组注入(inject)第一个主题,然后是订阅 promise 。

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

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

你有什么想法吗?

谢谢:)

主题: enter image description here

订阅错误:

enter image description here

编辑:

在将主题 promise 创建推送到我的 promise 数组中后,我设法通过添加超时('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 在处理请求之前发送了解析 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

关于node.js - 获取新创建的主题时,Google PubSub 抛出 "Not found",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50844471/

相关文章:

javascript - 有没有办法使用 MySQL 函数从 Lat、Lng 获取 POINT 坐标?

javascript - Node.js - 重复 require ('path'/'module' ) 语句

node.js - nginx + node + ssl + websockets,在一台服务器上

javascript - Cypress 请求是异步的——但是新对象的创建呢?

Kubernetes:kubectl运行:找不到命令

gcloud 崩溃(UnicodeEncodeError): 'ascii' codec can't encode character u'\xe7' in position 13: ordinal not in range(128)

javascript - 如果您使用 2 级 URL,Express 会将 URL 的第一部分添加到注入(inject)中?

c# - 当我不能使用 ConfigureAwait(false) 时?

c# - 以最大并发度运行多个操作 - 最后 2 个任务未执行

linux - 无法在 Linux 中通过 SSH 连接到 Compute Engine 实例