是什么导致 Google PubSub 中无法访问的错误?

What causing unreachable errors in Google PubSub?

我是 运行 应用程序,它由 Google 云函数组成,由 PubSub 主题触发,所以基本上它们是通过 Google PubSub 相互通信的。

问题是,它有时会遇到问题,并且在发布长达 9 秒或更长时间的消息时会出现延迟。我检查了 Metrics Explorer 并发现当高延迟时它显示下一个错误:

这是显示延迟的图表:

在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.

触发函数