如何从 GCP 函数 GUI 调用 PubSub 函数

Posted

技术标签:

【中文标题】如何从 GCP 函数 GUI 调用 PubSub 函数【英文标题】:How invoke a PubSub function from the GCP Functions GUI 【发布时间】:2020-07-10 05:08:23 【问题描述】:

我部署了以下功能:

interface MessageData 
  reviewId: string;


export const applyPreAssessRules = functions
  .pubsub.topic("applyPreAssessRules")
  .onPublish(async (message) => 
    const  reviewId  = message.json as MessageData;
    ...
  

云平台GUI提供了一个测试功能的页面,但是我不知道如何格式化输入。

我尝试了几件事,包括:

"reviewId": "LRuvmv14u7c47IRiravi"
"message": "reviewId": "LRuvmv14u7c47IRiravi"
"message":  "json": "reviewId": "LRuvmv14u7c47IRiravi"

我不断得到以下输出:

错误:函数执行失败。细节: 第一个参数必须是 string、Buffer、ArrayBuffer、Array 或 Array-like Object 类型之一。接收类型未定义

我错过了什么?

我已经使用 Firebase 部署了该功能。不知道会不会有影响...

【问题讨论】:

只是为了确认。该函数在 Firebase 中按预期工作,但在 GCP 中却没有? 函数本身运行良好。我想知道如何从 GCP 将有效的 JSON 有效负载传递给它,因为我们有这个测试 UI 有一些关于如何将 Cloud Functions 与 PubSub here 一起使用的示例。根据您收到的错误,我认为您应该使用 JSON.stringify(messageObject)JSON.stringify() 方法将对象转换为 JSON 字符串。 我认为你没有理解我的意思。我知道如何以编程方式调用 pubsub 函数。我想知道 GUI 的功能,所以我想我应该说 GUI 而不仅仅是 UI。我将编辑问题。 【参考方案1】:

事实上,@eespinola 几乎为您指明了正确的方向。如果您仔细检查他提供的link,您会发现 Cloud Functions 默认订阅者 sn-p:

/**
 * Triggered from a message on a Cloud Pub/Sub topic.
 *
 * @param object pubsubMessage The Cloud Pub/Sub Message object.
 * @param string pubsubMessage.data The "data" property of the Cloud Pub/Sub Message.
 */
exports.subscribe = (pubsubMessage) => 
  // Print out the data from Pub/Sub, to prove that it worked
  console.log(Buffer.from(pubsubMessage.data, 'base64').toString());
;

这个 sn-p 显示 pubsub 事件包含一个名为“data”的字段,它是一个 base64 编码的字符串。此外,如果您搜索 PubSub 的 API 文档,您会发现消息的 JSON representation 语法:


  "data": string,
  "attributes": 
    string: string,
    ...
  ,
  "messageId": string,
  "publishTime": string

因此,您需要将有效负载编码为具有该格式的 base64 字符串,并将其转换回函数内的 javascript 对象。

【讨论】:

我担心这会是答案。在这种情况下,UI 作为一个易于使用的界面毫无用处。它应该真正为这些属性提供字段并将 JSON 转换为 base64 以在数据中使用。要求用户在 UI 之外进行转换简直是疯了。我将提交功能请求。

以上是关于如何从 GCP 函数 GUI 调用 PubSub 函数的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Cloudflare 工作人员内部发布到 GCP PubSub 主题

GCP - 从 PubSub 到 BigQuery 的消息

如何使用 gsutil 向 GCP 存储桶添加 pubsub 通知

GCP - 如何添加关于发送到 pubsub 死信队列的消息数量的警报?

如何将 GCP Pubsub 订阅的消息转发到另一个主题?

从存储中读取 JSON 数组并发送到 GCP PubSub