Как использовать эмуляторы firebase pubsub для локального тестирования синхронизированных функций? - PullRequest
0 голосов
/ 16 апреля 2020

Я использую Firebase для проекта и работаю над созданием функции расписания, используя следующий код. Я хочу регистрировать сообщение каждую минуту, это запускается.

export const timedQuery = functions.pubsub.schedule('1 * * * *').onRun((context) => {
console.log("I am running")
return null;
})

У меня есть основные логи c кода, работающего под функцией http, и я хотел бы увидеть, работает ли это локально, перед развертыванием в рабочей среде. Просматривая документы Firebase, я скачал все эмуляторы FireBase и использую «эмуляторы FireBase: запуск», чтобы запустить их. Из журналов видно, что мой эмулятор pubsub успешно запускается на локальном хосте: 8085 и функция pubsub инициализируется, однако даже после ожидания 2-3 минут ничего не печатается. Можно ли проверить запланированные функции локально?

Также я создал это без использования облачного планировщика Google, так как я работаю только на firebase.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

В настоящее время локальный эмулятор Firebase не имитирует фактические запланированные функции. Документация гласит:

Интерфейс командной строки Firebase включает эмулятор Cloud Functions, который может эмулировать следующие типы функций:

  • HTTPS-функции
  • Вызываемые функции
  • Облачные функции Firestore

Я предлагаю подать запрос на функцию с Поддержка Firebase .

При развертывании запланированная функция, вы на самом деле используете Google Cloud Scheduler за кулисами. Детали управляются для вас. Как указано в документации :

Если вы хотите запланировать запуск функций в указанное время, используйте functions.pubsub.schedule (). OnRun () Этот удобный метод создает Google Cloud Pub / Sub topi c и использует Google Cloud Scheduler для запуска событий в этой топи c, гарантируя, что ваша функция работает по желаемому расписанию.

Я предлагаю рефакторинг кода вашей функции в метод, который вы можете проверить, вызвав его напрямую с помощью тестовой среды по вашему выбору. Вы также можете временно обернуть его в функцию HTTP и вызвать его таким образом.

0 голосов
/ 30 апреля 2020

На самом деле есть эмулятор Firebase PubSub. Чтобы включить его, вам нужно установить последний CLI (он наверняка в 8.2.0)

  • Rerun Firebase Init
  • Выбрать эмуляторы (пробел)
  • Выбрать PubSub (и другие, которые вам понадобятся sh)
  • Настройте нужные порты Dev
  • Установите CLI для установки эмуляторов

Создайте тестовый сценарий локально для отправки PubSub сообщений в очередь:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

const { PubSub } = require('@google-cloud/pubsub');
const pubsub = new PubSub();

exports.pubsubWriter = functions.https.onRequest(async (req, res) => {
    console.log("Pubsub Emulator:", process.env.PUBSUB_EMULATOR_HOST);

    const msg = await pubsub.topic('test-topic').publishJSON({
        foo: 'bar',
        date: new Date()
    }, { attr1: 'value' });

    res.json({
        published: msg
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...