Мой код успешно работает в 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.В консоли функций я выберу тему и опубликую сообщение типа «ТЕСТ» в сообщении textarea.
Что ожидается?
При проверке в журналах обычно отображается сообщение «ТЕСТ».Итак, я могу понять, что функция срабатывает успешно.
Что я вижу после развертывания в nodejs8?
После того, как я введу сообщение "ТЕСТ" в pubsub.В журнале я вижу сообщение «НЕТ».Таким образом, мое понимание - функция, вызванная тем, что она не получила мое сообщение.
После выполнения функции в течение 45 секунд.Это происходит сбой с сообщением textPayload: «Ошибка: функция вышла из области действия запроса. Функция прервана».
Когда я запускаю то же самое, на этот раз происходит сбой из-за памяти textPayload: «Ошибка: предел памяти превышен. Вызов функции был прерван».
Поскольку во второй раз происходит сбой из-за памяти, в настоящее время используется 256 МБ.Поэтому я редактирую функцию и увеличиваю ее до 512 МБ.Первая ошибка возвращается снова: «Ошибка: функция вышла из области действия. Вызов функции был прерван».
На данный момент, я сомневаюсь, что моя программа, которая ранее работала, просто для обновления до nodejs8.Я удалил предыдущую рабочую функцию и попытался развернуть ее с новой версией узла.Так что я возвращаюсь и заново развертываю с nodejs6 и 256MB памяти.Когда я выполняю функцию, она работает.
В основном эта функция выполняет очистку сайта и обновляет базу данных.Прошло около 10–45 с.
Итак, мне хотелось бы знать две вещи: что изменилось в NodeJS8 в GCP.
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);
Потребляет много памяти.То, что рабочий узел js6 с 256 МБ дает сбой даже с 512 МБ.
Я знаю, что nodejs8 находится в бета-версии.В конце концов это придет в GA.Как решить это.