我的代码在nodejs6中成功运行。我只是想将其部署在nodejs8中。
index.js包含以下代码
// [START functions bgMCMA]
/**
* Background Cloud Function - Triggered by PubSub.
* @param {!Object} event The Cloud Functions event.
* @param {!Function} The callback function.
*/
exports.bgScrapeMCMA = (event, callback) => {
//Logic to avoid infinite loop on timeout
const eventAge = Date.now() - Date.parse(event.timestamp);
const eventMaxAge = 420000; //7Minutes as timeout is set as 504 seconds(9Minutes)
// Ignore events that are too old
if (eventAge > eventMaxAge) {
console.log(`INFINITE-LOOP-BREAK : Dropping context ${context} with age ${eventAge} ms.`);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
return;
}
// The Cloud Pub/Sub Message object.
const pubSubMessage = event.data;
const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';
console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);
MCMA.start().then( (resp) =>{
console.log('MCMA : Success : '+resp);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
}).catch( (e) =>{
console.error('MCMA : Error : '+e);
callback(); // Don't forget to call the callback. Remember its either a callback() or promise
});
};
// [END functions bgMCMA]
使用以下命令部署到nodejs8
gcloud functions deploy bgScrapeMCMA --trigger-resource psTriggerbgScrapeMCMA --trigger-event google.pubsub.topic.publish --entry-point=bgScrapeMCMA --timeout=540s --runtime nodejs8
功能已成功部署。
我正在通过pubsub触发代码。在功能控制台中,我将单击该主题,然后在消息文本区域中发布“ TEST”之类的消息。
期望是什么?
在检查日志时,通常会显示消息“ TEST”。因此,我可以理解功能已成功触发。
在nodejs8中部署后,我看到了什么?
在pubsub中输入消息“ TEST”后。在日志中,我看到的消息是“ NONE”。所以我的理解是函数触发了它,但没有得到我的消息。
函数执行大约45秒后。它因消息textPayload而崩溃:“错误:函数崩溃超出了请求范围 函数调用被中断。”
当我重新运行时,这次由于内存textPayload而崩溃:“错误:内存限制已超出。函数调用被中断。”
自从第二次由于内存崩溃以来,当前使用的内存为256MB。所以我编辑功能并将其增加到512MB。第一个错误再次出现,“错误:函数崩溃超出了请求范围 函数调用被中断。”
在这一点上,我怀疑我以前运行的程序只是为了升级到nodejs8。我删除了以前的工作功能,并尝试使用新的节点版本进行部署。所以我回去重新部署了nodejs6和256MB内存。当我执行功能时。
该功能的主要作用是刮取网站并更新Firebase。经过的功能大约在10s-45s之间。
所以我基本上想知道的两件事是,GCP的NodeJS8中发生了什么变化。 1.来自pubsub的简单消息未出现在日志中
const pubSubMessage = event.data;
const message = pubSubMessage.data ? Buffer.from(pubSubMessage.data, 'base64').toString() : 'NONE';
console.log('MCMA triggered time : ' + DateTime.getCurrentISTdt("yyyy-mmm-dd hh:mm:ss") + ' Message : ' + message);
我知道nodejs8是beta版。最终它将进入通用航空。如何解决这个问题。
答案 0 :(得分:1)
下面的评论显示了如何解决此问题。