我需要将一个耗时的过程分解为多个云功能,因为总共需要9分钟的时间(最大执行时间)。为此,我想要一个由酒吧/子主题触发的一个(条目)云函数将消息写入其他主题,这又触发了另一个pub/sub cloud函数。
我正在通过firebase experimental:functions:shell
进行测试。触发输入功能不是问题,但是当该功能调用admin.messaging().sendToTopic(...)
时,我会收到以下错误:
试图对FCM服务器进行身份验证时会发生错误。制作 确保用于身份验证此SDK的凭据具有适当的 权限。请参阅https://firebase.google.com/docs/admin/setup 设置说明。
我不确定这是否是因为我正在本地测试,但是找不到将消息发送到主题的任何简单方法。Firebase控制台具有"通知"部分,您可以轻松地格式化和发送消息,但是这些似乎仅针对客户端应用程序(ios/android/web)。
我在文档中找不到有关在云功能中配置FCM使用的凭据。我正在使用标准凭据。例如,我的功能毫无问题地写给我的firestore实例。
在Admin SDK中使用FCM的文档似乎也没有提及任何内容。
firebase(Google)云消息传递和Google Cloud Pub/sub是不同的消息系统,如下所示:
两者都是传递消息的系统,但是Google云消息是 Google时,用于传递往返用户设备的消息 Cloud Pub/sub用于在服务器之间通信。Google Cloud 消息传递旨在扩展到大量的交付端 点,但吞吐量较低(每秒消息)。 pub/sub在吞吐量上没有限制,并且具有更通用的API。
尽管他们共享主题的概念,但是发送到FCM主题的消息不会触发Pub/sub Cloud功能。
您可以使用@google-cloud/pubsub
从云功能中发布pub/sub消息。文档在这里。
以下两个函数演示了发布并接收简单的字符串消息。
const pubsub = require('@google-cloud/pubsub')();
exports.testWrite = functions.database.ref('/test').onWrite(event => {
var topic = pubsub.topic('test-topic');
// Publish a message to the topic.
var publisher = topic.publisher();
var message = Buffer.from('Hello World!');
return publisher.publish(message);
});
exports.helloPubSub = functions.pubsub.topic('test-topic').onPublish(event => {
const buffer = Buffer.from(event.data.data, 'base64');
console.log('message=', buffer.toString('utf8'));
return null;
});