使用云功能在 google 云 pub/sub 上发布需要 3 分钟 - nodejs

Publish on google cloud pub/sub with a cloud function take 3minutes - nodejs

我正在执行一个函数,该函数将在收到 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

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

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)
    }
}