Node.js 谷歌PubSub-throw“;“未找到”;获取新创建的主题时
我有一个函数,可以在服务器启动时创建主题和订阅 问题是我无法创建链接到新创建主题的订阅,GooglePubSub服务器会抛出一个NotFound错误 我甚至在主题创建后添加了20秒的超时,但没有任何改变Node.js 谷歌PubSub-throw“;“未找到”;获取新创建的主题时,node.js,async-await,gcloud,google-cloud-pubsub,Node.js,Async Await,Gcloud,Google Cloud Pubsub,我有一个函数,可以在服务器启动时创建主题和订阅 问题是我无法创建链接到新创建主题的订阅,GooglePubSub服务器会抛出一个NotFound错误 我甚至在主题创建后添加了20秒的超时,但没有任何改变 export async function init() { // promises.topics is an array of promises const topics = await Promise.all(promises.topics); console.log('YEAH
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之后创建的
我的承诺数组首先注入主题,然后是订阅承诺
当添加一个重试功能,每2秒钟重试10次时,它也不起作用
它甚至没有显示在google日志中,我认为他们的API上有一个缓存,只返回新处理的数据而不重新尝试
你有什么想法吗
谢谢:)
主题:
订阅错误:
编辑:
在我的promise数组中推送promise creation主题后,我通过添加一个超时('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在处理请求之前发送了解决承诺。
因此,当您创建订阅时,他无法找到主题。
但我无法证实这一点,有人知道为什么吗
我想删除这个超时,以获得一个更不可知的实现。
更奇怪的是,我发现如果你只是把承诺称为循环,就不需要超时
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你介意把最后一次编辑作为答案发布吗?供将来参考。事实上,我会添加更多关于它的信息。我还有一个毫无疑问的问题;)谢谢你的提醒,很高兴知道!让我们看看是哪一个问题。我的问题对谷歌员工来说似乎也很有趣:DHello!我是GCP支持人员,我检查了你的答案。这种行为很奇怪,所以我建议你打开一个bug,发布你的情况,你以前尝试过什么,你是如何修复的,等等。如果可能的话,你能接受自己的答案吗?供社会人士日后参考。您可以稍后使用错误的结果对其进行编辑。