我有一个在我的服务器启动时创建主题和订阅的功能。
问题是我无法创建链接到新创建主题的订阅,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只有一个缓存,只返回新处理的数据而不重新尝试。
你有什么想法吗?
谢谢:)
SUBSCRIPTION错误:
编辑:
我通过在promise数组中推送主题承诺创建后,通过添加超时('2000')来解决问题。
答案 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