使用云功能在谷歌云发布/订阅上发布需要 3 分钟 - nodejs

Posted

技术标签:

【中文标题】使用云功能在谷歌云发布/订阅上发布需要 3 分钟 - nodejs【英文标题】:Publish on google cloud pub/sub with a cloud function take 3minutes - nodejs 【发布时间】:2020-12-28 19:00:01 【问题描述】:

我正在做一个函数,它将在收到 webhook 后发布事件的类型。 它正在工作,但它会在函数启动后 3 分钟发布消息。 这个长时间的停顿来自const PubSub = require('@google-cloud/pubsub') 我怎样才能让它更快?谢谢!

源代码:

exports.Challenge = (req,res) => 
    var type = req.body['event']['type']   
    console.log(type)                       
    console.log("start pubsub msg function")
    msgpubsub(type)
    console.log("end pubsub msg function")


function msgpubsub(_type)
    const topicName = "NAME_OF_TOPIC"
    console.log(`publishing message to topic: $topicName`)

    console.log("start require('@google-cloud/pubsub")
    const PubSub = require('@google-cloud/pubsub')
    console.log("end require(@google-cloud/pubsub)")

    console.log("start new pubsub")
    const pubSubClient = new PubSub('ID');
    console.log("end newpubsub")
    
    const messageBuffer = Buffer.from(_type)
    console.log("message buffer : " + messageBuffer)

    try
        pubSubClient.topic(topicName).publish(messageBuffer)
     catch(err)
        console.error(err)
    

logs

【问题讨论】:

【参考方案1】:

最好创建一次客户端,然后在收到事件时使用客户端发布消息。就像现在一样,您正在为每个活动创建一个全新的客户,这很昂贵。

const topicName = "NAME_OF_TOPIC"
const PubSub = require('@google-cloud/pubsub')
const pubSubClient = new PubSub('ID');
const topicPublisher = pubSubClient.topic(topicName);

exports.Challenge = (req,res) => 
    var type = req.body['event']['type']   
    console.log(type)                       
    console.log("start pubsub msg function")
    msgpubsub(type)
    console.log("end pubsub msg function")


function msgpubsub(_type)    
    const messageBuffer = Buffer.from(_type)
    console.log("message buffer : " + messageBuffer)

    try 
        var publishFuture = topicPublisher.publish(messageBuffer);
        publishFuture.get();
     catch(err)
        console.error(err)
    

【讨论】:

谢谢,它解决了我的问题!从 4 分钟到 300 毫秒

以上是关于使用云功能在谷歌云发布/订阅上发布需要 3 分钟 - nodejs的主要内容,如果未能解决你的问题,请参考以下文章

Neo4j 在谷歌云 pubsub 订阅中写入事务恐慌

谷歌云存储功能在订阅者连接时发送已发送的消息

如何在谷歌云功能中使用谷歌表格 API

谷歌云点击部署hadoop

如何在谷歌云上正确托管 node.js 应用程序?

如何在谷歌云数据流中停止流式传输管道