Firebase Pub Sub Emulator 未收到消息

Posted

技术标签:

【中文标题】Firebase Pub Sub Emulator 未收到消息【英文标题】:Firebase PubSub Emulator not recieving messages 【发布时间】:2021-05-04 02:06:31 【问题描述】:

我正在尝试获取 firebase 模拟器,以使用 pubsub 发布触发云功能。 基本设置在云功能之外工作。 尝试连接云功能时,从未出现任何消​​息。

我有一种感觉,我做的事情根本上是错误的。

发布代码:

import  PubSub, Topic  from '@google-cloud/pubsub'; 
const topicName = 'MyTopic';
const [taskTopic] = await pubsub.createTopic(topicName);
await this.taskTopic.publish(Buffer.from(msg));

“手动”订阅:作品

 [subscription] = await this.renderTaskTopic.createSubscription(subscriptionName);
 subscription.on('message', (message) => 
    console.log('Received message:', message.data.toString());
    process.exit(0);
 );

使用云功能订阅:永远不会在模拟器中被调用


export const subscribeToRenderTask = functions.pubsub.topic(topicName)
    .onPublish(async (message: functions.pubsub.Message) => 
        console.log('subscribeToRenderTask', message.data);
     

emalutor 设置看起来不错

 functions: The Firebase Authentication emulator is not running, so calls to Firebase Authentication will affect production.
✔  functions[convert]: http function initialized (http://0.0.0.0:5001/puredio-development/europe-west3/convert).
✔  functions[subscribeToRenderTask]: pubsub function initialized.

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://0.0.0.0:8081                  │
└─────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬───────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI           │
├───────────┼────────────────┼───────────────────────────────┤
│ Functions │ 0.0.0.0:5001   │ http://0.0.0.0:8081/functions │
├───────────┼────────────────┼───────────────────────────────┤
│ Firestore │ 0.0.0.0:8080   │ http://0.0.0.0:8081/firestore │
├───────────┼────────────────┼───────────────────────────────┤
│ Pub/Sub   │ 127.0.0.1:8085 │ n/a                           │
└───────────┴────────────────┴───────────────────────────────┘
  Emulator Hub running at 127.0.0.1:4400
  Other reserved ports: 4500

【问题讨论】:

【参考方案1】:

RTFM:我需要设置以下环境变量,以便我的测试能够真正找到 pub sub 模拟器

export PUBSUB_EMULATOR_HOST = 'localhost:8085'
export PUBSUB_PROJECT_ID = 'my-project'

【讨论】:

您是否必须在运行测试时设置这些变量?我有一个设置,我有 API 触发一条消息到 pub-sub 主题和订阅它的云函数。在我的集成测试 (mocha-chai) 中,我可以调用 API,还可以看到日志说明该消息已发布到主题。但是,我的云功能订阅不是由这条消息触发的。 糟糕,我在测试项目中设置了这些变量,而我的 API 一直在将消息推送到真正的 pub-sub。我在我的实际 API 上配置了这些,随后消息开始被推送到我的模拟器

以上是关于Firebase Pub Sub Emulator 未收到消息的主要内容,如果未能解决你的问题,请参考以下文章

如何触发 Firebase 模拟器的 Pub/Sub 主题

无法按日期从 Google Cloud Pub/Sub 功能中的 Firebase 获取文档

Firebase Cloud Functions 如何确认 Cloud pub/sub

如何从 Firebase Cloud Function 在 Google Pub/Sub 中发布消息?

“initialize_app '默认的 Firebase 应用已经存在。”云函数 pub sub

插件 cloud_firestore 和 firebase_auth 阻止与 android Emulator 同步