J'utilise Firebase pour un projet et je travaille sur la création d'une fonction de planification à l'aide du code suivant. Je veux enregistrer un message chaque minute que cela fonctionne.
export const timedQuery = functions.pubsub.schedule('1 * * * *').onRun((context) => {
console.log("I am running")
return null;
})
J'ai la logique principale du code fonctionnant sous une fonction http et j'aimerais voir si cela fonctionne localement avant de le déployer en production. En parcourant la documentation Firebase, j'ai téléchargé tous les émulateurs Firebase et j'utilise "émulateurs firebase: start" pour les faire fonctionner. D'après les journaux, il semble que mon émulateur pubsub démarre avec succès à localhost: 8085 et la fonction pubsub est initialisée, mais même après avoir attendu 2 à 3 minutes, rien ne s'imprime. Est-il possible de tester les fonctions planifiées localement?
J'ai également créé cela sans utiliser le planificateur de cloud Google puisque je ne suis que sur Firebase.
En fait, il existe un émulateur Firebase PubSub. Pour l'activer, vous devez avoir la récente CLI installée (c'est dans 8.2.0 à coup sûr)
Créez un script de test localement pour soumettre les messages PubSub dans la file d'attente:
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
})
});