是什么导致 Google PubSub 中无法访问的错误?
What causing unreachable errors in Google PubSub?
我是 运行 应用程序,它由 Google 云函数组成,由 PubSub 主题触发,所以基本上它们是通过 Google PubSub 相互通信的。
问题是,它有时会遇到问题,并且在发布长达 9 秒或更长时间的消息时会出现延迟。我检查了 Metrics Explorer 并发现当高延迟时它显示下一个错误:
- unreachable_5xx_error_500
- unreachable_no_response
- internal_rejected_error
- unreachable_5xx_error_503
- url_4xx_error_429
这是显示延迟的图表:
在Google云函数中发布消息的代码示例:
const {PubSub} = require('@google-cloud/pubsub');
const pubSubClient = new PubSub();
async function publishMessage() {
const topicName = 'my-topic';
const dataBuffer = Buffer.from(data);
const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
console.log(`Message ${messageId} published.`);
}
publishMessage().catch(console.error);
PubSub Topic触发函数代码示例:
exports.subscribe = async (message) => {
const name = message.data
? Buffer.from(message.data, 'base64').toString()
: 'World';
console.log(`Hello, ${name}!`);
}
而且我认为这个错误会导致延误。我在互联网上没有找到任何关于此的内容,所以我希望您能解释导致此错误的原因以及原因,并且可能会对此有所帮助。
正如评论中所讨论的那样,可以进行一些更改和解决方法来解决或减少问题。
首先,正如在此 guide 中所发现的,PubSub
尝试在传递之前收集多条消息。换句话说,它试图一次传递多条消息。在这种特定情况下,要实现更真实的实时场景,应将批量大小指定为 1,这将导致 PubSub
单独传递每条消息。可以在发布者对象创建中使用 maxMessages
属性 指定此批量大小,如下面的代码所示。除此之外,maxMilliseconds
属性 可用于指定允许的最大延迟。
const batchPublisher = pubSubClient.topic(topicName, {
batching: {
maxMessages: maxMessages,
maxMilliseconds: maxWaitTime * 1000,
},
});
在讨论中还注意到该问题可能与 Cloud Function
的冷启动有关,由于其架构,该应用程序的延迟更大。解决这部分问题的解决方法是在体系结构中插入 Node JS
服务器以使用 PubSub
.
触发函数
我是 运行 应用程序,它由 Google 云函数组成,由 PubSub 主题触发,所以基本上它们是通过 Google PubSub 相互通信的。
问题是,它有时会遇到问题,并且在发布长达 9 秒或更长时间的消息时会出现延迟。我检查了 Metrics Explorer 并发现当高延迟时它显示下一个错误:
- unreachable_5xx_error_500
- unreachable_no_response
- internal_rejected_error
- unreachable_5xx_error_503
- url_4xx_error_429
这是显示延迟的图表:
在Google云函数中发布消息的代码示例:
const {PubSub} = require('@google-cloud/pubsub');
const pubSubClient = new PubSub();
async function publishMessage() {
const topicName = 'my-topic';
const dataBuffer = Buffer.from(data);
const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
console.log(`Message ${messageId} published.`);
}
publishMessage().catch(console.error);
PubSub Topic触发函数代码示例:
exports.subscribe = async (message) => {
const name = message.data
? Buffer.from(message.data, 'base64').toString()
: 'World';
console.log(`Hello, ${name}!`);
}
而且我认为这个错误会导致延误。我在互联网上没有找到任何关于此的内容,所以我希望您能解释导致此错误的原因以及原因,并且可能会对此有所帮助。
正如评论中所讨论的那样,可以进行一些更改和解决方法来解决或减少问题。
首先,正如在此 guide 中所发现的,PubSub
尝试在传递之前收集多条消息。换句话说,它试图一次传递多条消息。在这种特定情况下,要实现更真实的实时场景,应将批量大小指定为 1,这将导致 PubSub
单独传递每条消息。可以在发布者对象创建中使用 maxMessages
属性 指定此批量大小,如下面的代码所示。除此之外,maxMilliseconds
属性 可用于指定允许的最大延迟。
const batchPublisher = pubSubClient.topic(topicName, {
batching: {
maxMessages: maxMessages,
maxMilliseconds: maxWaitTime * 1000,
},
});
在讨论中还注意到该问题可能与 Cloud Function
的冷启动有关,由于其架构,该应用程序的延迟更大。解决这部分问题的解决方法是在体系结构中插入 Node JS
服务器以使用 PubSub
.