繁体   English   中英

将 Firebase 模拟器 PubSub 用于定时函数时出错

[英]Error Using Firebase Emulators PubSub for Timed Function

我有一个定时云函数,我想在 Firebase 模拟器中测试它。 为此,我使用了此处描述的解决方案( 如何使用 pubsub 模拟器在本地调用 firebase 调度函数),该解决方案使用 Pub/Sub 消息触发调度函数。

此解决方案成功触发了该功能,但它似乎重复调用的次数比预期的要多。 例如,当我运行下面的代码时,它应该每分钟调用一次计划函数:但是,它在一分钟后运行一次代码,然后在 2 分钟后运行两次(所以它总共运行了 3 次),然后在运行了 3 次3 次(所以它总共运行了 6 次),并继续增加从那里的调用,这表明 setInterval() 被调用了不止一次(我的 Firebase index.js 文件中有 setInterval() )。 有没有什么办法解决这一问题? 非常感谢。

const pubsub = new PubSub({
  apiEndpoint: 'localhost:8085'
});

setInterval(() => {
  const SCHEDULED_FUNCTION_TOPIC = 'firebase-schedule-yourFunctionName';
  console.log(`Trigger sheduled function via PubSub topic: ${SCHEDULED_FUNCTION_TOPIC}`);
  const msg = await pubsub.topic(SCHEDULED_FUNCTION_TOPIC).publishJSON({
    foo: 'bar',
  }, { attr1: 'value1' });
}, 1 * 60 * 1000); // every 1 minute

我复制了你的情况,但我这边没有问题。 这是我的完整源代码:

索引.js

const admin = require("firebase-admin");
const functions = require("firebase-functions");
const { PubSub } = require("@google-cloud/pubsub");

const pubsub = new PubSub();
admin.initializeApp();

const date_ob = new Date();


exports.pubsubScheduled = functions.pubsub.schedule("every mon 07:00").onRun((context) => {
    console.log("========== PUBSUB FUNCTION ==========");
    console.log("Time", new Date());
    return true;
});

触发器.js

const admin = require("firebase-admin");
const functions = require("firebase-functions");
const { PubSub } = require("@google-cloud/pubsub");

admin.initializeApp();

var date_ob = new Date();
  
const pubsub = new PubSub({
 apiEndpoint: 'localhost:8085' // Change it to your PubSub emulator address and port
 });

  
    setInterval(() => {
    const SCHEDULED_FUNCTION_TOPIC = 'firebase-schedule-pubsubScheduled';
    console.log(`Trigger sheduled function via PubSub topic: ${SCHEDULED_FUNCTION_TOPIC} at ${new Date()}`);
    const msg =  pubsub.topic(SCHEDULED_FUNCTION_TOPIC).publishJSON({
      foo: 'bar',
    }, { attr1: 'value1' });
  }, 1 * 60 * 1000); // every 1 minute

运行模拟器后触发代码( trigger.js )没有问题,一切正常,没有出现多输出。 您可以编辑您的问题并添加更多详细信息,我们将如何重现您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM