【发布时间】:2021-02-27 04:37:17
【问题描述】:
我正在尝试将我的 firebase 云功能项目连接到第三方 pub/sub(一个单独的项目)。根据这个thread,这是不可能的,所以没有传统的方法可以做到这一点。但是,我尝试在我的 firebase 云功能上使用 @google-cloud/pubsub 客户端手动订阅某些主题。我需要对发布/订阅消息做出反应并编写/更新某些文档。
示例(最小):
我在 sub.ts 上有一个 pubsub 订阅:
const pubSubClient = new PubSub({
projectId: config.project_id,
credentials: {
client_email: config.client_email,
private_key: config.private_key
}
});
我订阅某个主题做一些业务逻辑
const 订阅 = pubSubClient.subscription('my-subscription');
this.subscription.on('message', async (message) => {
try {
message.ack();
const event = parseData(message.data);
await admin.firestore().collection('my-collection').add(event);
} catch (e) {
console.error(e);
}
});
然后这个文件被导入到我声明大多数 CF 函数的 index.js 中。
import * as admin from 'firebase-admin';
admin.initializeApp();
import './sub';
export { myFunction } from './modules/my-module';
export { myOtherFunction } from './modules/other-module';
我的订阅似乎会在一段时间后消失,并且消息不会通过。如果我重新部署我的功能,它似乎可以工作一段时间,但随后它会停止收听消息。我读过 Firebase 云函数是无状态的,所以在这种情况下,我需要在我的 firebase 项目中使用“有状态”模块。这可能吗?还是我应该在另一台服务器上管理它?
谢谢!
【问题讨论】:
-
我很难想象您的系统是如何工作的以及问题是什么。请编辑问题以更详细地解释问题所在,并显示任何有助于说明的相关代码。
-
谢谢@DougStevenson 我改变了一点,你不明白什么?我需要能够在我的 firebase 函数中订阅 google-pub/sub 项目并收听消息,然后进行一些写入/更新操作。
-
您的问题表明您尝试编写代码,但我猜它不起作用?我说不出来。请编辑问题以共享代码并进行更多说明。在 Stack Overflow 上,预计问题会提供 complete, minimal example。
-
好的 @DougStevenson 感谢您的反馈。我改进了我的问题。
标签: node.js firebase google-cloud-platform google-cloud-firestore google-cloud-pubsub