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

Posted

技术标签:

【中文标题】如何从 Firebase Cloud Function 在 Google Pub/Sub 中发布消息?【英文标题】:How to publish message in Google Pub/Sub from Firebase Cloud Function? 【发布时间】:2018-06-22 18:35:54 【问题描述】:

我写了一个函数来接收一个 http 请求并发送一封电子邮件。但是,我想收到一个 http 请求并发送一个 pub 消息。问题是文档不清楚。我该怎么做?

这是我的实际代码。

exports.weeklyEmail = functions.https.onRequest((req,res) => 
const email = '****@gmail.com'

console.log('Sending e-mail')

const mailOptions = 
    to: email,
    from: '****@alunos.utfpr.edu.br',
    subject: 'Teste',
    text: 'Conteudo do email '
   

mailTransport.sendMail(mailOptions).then(
    () =>          
        res.send('Email sent')
    
).catch(error => 
    res.send(error)
)
)

【问题讨论】:

【参考方案1】:

需要导入pub-sub库const PubSub = require('@google-cloud/pubsub'),发起客户端,发布消息。 文档:

https://cloud.google.com/pubsub/docs/publisher#publish-messages-to-a-topic https://cloud.google.com/functions/docs/calling/pubsub

不过,另一种方法是在firestore writes 上触发后台功能。

每当您在集合 (pubsub) 中创建文档时,您的 bg 函数都会在文档写入时被调用:

exports.myTriggerFunction = functions.firestore
  .document('pubsub/docId')
  .onWrite((change, context) =>  /* ... */ );

而且,它不仅限于onCreate

Event Type  Trigger
onCreate    Triggered when a document is written to for the first time.
onUpdate    Triggered when a document already exists and has any value changed.
onDelete    Triggered when a document with data is deleted.
onWrite     Triggered when onCreate, onUpdate or onDelete is triggered.

【讨论】:

【参考方案2】:

据我了解,您希望通过 Firebase Cloud Functions 实现向 Pub/Sub 发送消息。

您可以轻松地使用Node.js Pub/Sub client library,它具有已定义的功能,例如publish。

或者,如果您愿意,您可以构建自己的客户端,直接调用REST API for Google Cloud Pub/Sub。如果它更适合您的需求,还有一个 RPC reference。


你不需要

broker 的主机、端口、id、密码等信息

作为提到的客户端,否则您的 REST API 请求将需要 authentication 。

【讨论】:

你知道我是否可以在没有 Apple Push Notifications Service 的情况下在 ios 应用中使用它吗? 很遗憾,我不知道 Apple 推送通知服务。鉴于 Google 的 Pub/Sub 可以通过 APIs Services 实现,它应该独立于平台、编程语言......即只要可以实现 HTTP 客户端来执行对 REST API 端点的请求。我不知道它是否相关,或者一个很好的类比,但Firebase Cloud Messaging 也适用于 iOS ......所以它可能与 Cloud Pub/Sub 相同 您的评论可能值得一个新的 SO 帖子,因为它将处理一个特别不同的主题。从“如何通过 Firebase Cloud Function 在 Pub/Sub 中发布”到“如何将 Apple Push Notifications Service 与 .... 集成”(猜测) 谈到身份验证 - 在 Fireabse 云函数中使用 Pub/Sub 客户端库时如何对其进行身份验证?我尝试创建一个简单的函数,但在函数尝试发布消息时收到PERMISSION_DENIED 错误。

以上是关于如何从 Firebase Cloud Function 在 Google Pub/Sub 中发布消息?的主要内容,如果未能解决你的问题,请参考以下文章

如何直接从您的 Angular 项目中调用 Firebase Cloud Function

如何使用 graphql 从 Firebase 使用 Flutter 从 Cloud Firestore 获取数据?

如何以安全的方式从 Cloud Tasks 调用 Firebase 函数?

如何从 Cloud Function 获取 Firebase 项目名称或 ID

如何从 Firebase Cloud 功能中提取已部署的云功能 [重复]

Flutter Cloud Messaging:如何从应用程序发送通知(而不是从 Firebase 控制台)