后台函数
后台函数是一种事件驱动的函数类型。Node.js、Go、Python 和 Java 均支持此函数。
如果您要在响应事件(例如 Pub/Sub 主题中收到消息、Cloud Storage 存储分区发生更改或 Firebase 事件)时间接调用 Cloud Functions 函数,则可以使用后台函数。
如需了解如何重试后台函数,请参阅重试事件驱动的函数。
支持运行时
以下运行时支持后台函数:
语言 | 版本 |
---|---|
Node.js | 全部 |
Python | 全部 |
Go | 全部 |
Java | 全部 |
用法示例
以下示例展示了如何处理 Pub/Sub 和 Cloud Storage 中的事件。如需详细了解如何处理不同来源的事件,请参阅调用 Cloud Functions 函数。
Pub/Sub 示例
此示例展示了一个由 Pub/Sub 事件触发的 Cloud Functions 函数。每次有消息发布到 Pub/Sub 主题时,系统都会调用此函数,使用从消息中提取的数据向日志中写入一句问候语。
Node.js
Python
Go
Java
如需详细了解如何部署由 Pub/Sub 事件触发的 Cloud Functions 函数,请参阅 Pub/Sub 触发器和 Pub/Sub 教程。
Cloud Storage 示例
此示例展示了一个由 Cloud Storage 事件触发的 Cloud Functions 函数。 每当 Cloud Storage 存储分区中创建了对象时,系统都会调用该函数,并向日志中写入一条有关这项更改的消息。
Node.js
Python
Go
Java
如需详细了解如何部署由 Cloud Storage 事件触发的 Cloud Functions 函数,请参阅 Cloud Storage 触发器和 Cloud Storage 教程。
函数参数
一些参数会传递至后台函数,其中包含与触发函数执行的事件相关联的数据。下面介绍后台函数的参数:
Node.js
在 Node.js 运行时中,系统向您的函数传递参数 (data, context, callback)
:
属性 | 说明 | 类型 |
---|---|---|
data |
事件的数据对象。其类型取决于具体事件。 | 对象 |
context |
事件的上下文对象。 | 对象 |
context.eventId |
事件的唯一 ID。例如:"70172329041928" 。 |
字符串 |
context.timestamp |
此事件的创建日期/时间。例如:"2018-04-09T07:56:12.975Z" 。
|
字符串 (ISO 8601) |
context.eventType |
事件的类型。例如:"google.pubsub.topic.publish" 。
|
字符串 |
context.resource |
发出事件的资源。 | 对象 |
callback |
用于发出信号来指示函数的执行已完成的回调函数。 遵循“errback”约定,该约定将第一个参数解释为错误: callback(); // Success callback(null, 'Success!'); // Success callback(1); // Error callback(new Error('Failed')); // Error |
函数 |
Python
在 Python 运行时中,系统向您的函数传递参数 (data, context)
:
属性 | 说明 | 类型 |
---|---|---|
data |
包含事件数据的字典。其格式取决于具体事件。 | Cloud Storage 对象或 PubsubMessage |
context |
事件的上下文对象。 | Context |
context.event_id |
事件的唯一 ID。例如:"70172329041928" 。 |
字符串 |
context.timestamp |
此事件的创建日期/时间。例如:"2018-04-09T07:56:12.975Z" 。
|
字符串 (ISO 8601) |
context.event_type |
事件的类型。例如:"google.pubsub.topic.publish" 。
|
字符串 |
context.resource |
发出事件的资源。 | 字符串 |
Go
在 Go 运行时中,系统向您的函数传递参数 (ctx, Event)
:
属性 | 说明 | 类型 |
---|---|---|
ctx |
一个 context.Context 值,其中包含事件的相关元数据。您可以使用 cloud.google.com/go/functions/metadata 软件包检索该元数据。 |
context.Context
|
Event |
一种
您在代码中提供的
请注意, |
用户定义的 struct |
Java
在 Java 运行时中,系统向您的函数传递参数 (event, context)
。后台函数有两种类型:BackgroundFunction<T>
和 RawBackgroundFunction
:
属性 | 说明 | 类型 |
---|---|---|
event |
事件的载荷。载荷的内容取决于注册了函数的触发器。
对于 BackgroundFunction<T> ,此参数的类型为 T ,是一个由用户定义的类。使用 Gson.fromJson 将事件的 JSON 载荷反序列化为此类的一个实例。
对于 RawBackgroundFunction ,此参数的类型为 String ,是事件的 JSON 载荷。
|
由用户定义或 String
|
context |
一个只读 Context 对象,其中包含有关事件的元数据。
|
Context
|
事件数据取决于注册了函数的触发器,例如 Pub/Sub 或 Cloud Storage。对于直接触发的函数(使用 gcloud functions call
命令触发),事件数据包含您直接发送的消息。
终止后台函数
如果一个函数创建了后台任务(例如线程、future、Node.js Promise
对象、回调或系统进程),则必须先终止这些任务或以其他方式对其进行解析,然后再从函数返回。在从特定执行返回之前未终止的任何任务可能不会完成,还可能导致出现未定义的行为。
后续步骤
- 部署 Cloud Functions 函数。
- 调用 Pub/Sub 触发器函数。
- 调用 Cloud Storage 触发器函数。
- 教程:搭配使用 Cloud Functions 和 Pub/Sub。
- 教程:搭配使用 Cloud Functions 和 Cloud Storage。