【问题标题】:Publish on google cloud pub/sub with a cloud function take 3minutes - nodejs使用云功能在谷歌云发布/订阅上发布需要 3 分钟 - 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

【问题讨论】:

    标签: node.js google-cloud-functions google-cloud-pubsub


    【解决方案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 毫秒
    猜你喜欢
    • 2021-12-03
    • 2021-10-31
    • 2019-04-24
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 2018-07-11
    相关资源
    最近更新 更多