Облачные функции Google - облачная функция nodejs6 не работает в nodejs8 (бета) - PullRequest
0 голосов
/ 15 февраля 2019

Мой код успешно работает в 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?

  1. После того, как я введу сообщение "ТЕСТ" в pubsub.В журнале я вижу сообщение «НЕТ».Таким образом, мое понимание - функция, вызванная тем, что она не получила мое сообщение.

  2. После выполнения функции в течение 45 секунд.Это происходит сбой с сообщением textPayload: «Ошибка: функция вышла из области действия запроса. Функция прервана».

  3. Когда я запускаю то же самое, на этот раз происходит сбой из-за памяти 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.Как решить это.

1 Ответ

0 голосов
/ 17 февраля 2019

Комментарий ниже показывает, как эта проблема была решена.

...