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
我有一个功能可以在我的服务器启动时创建主题和订阅。
问题是我无法创建链接到新创建主题的订阅,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