【问题标题】:How invoke a PubSub function from the GCP Functions GUI如何从 GCP 函数 GUI 调用 PubSub 函数
【发布时间】: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。我将编辑问题。

标签: google-cloud-platform google-cloud-functions google-cloud-pubsub


【解决方案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 之外进行转换简直是疯了。我将提交功能请求。
猜你喜欢
  • 1970-01-01
  • 2021-09-12
  • 2021-10-25
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
相关资源
最近更新 更多