使用 Pub/Sub 模拟器在本地进行测试
您可以在部署函数之前在本地对其进行测试,方法是将 Functions 框架与 Pub/Sub 模拟器配合使用。 本页面上的示例基于 Cloud Run functions 函数。
将 Functions 框架与 Pub/Sub 模拟器配合使用
您可以使用来自 Pub/Sub 模拟器的推送消息在本地触发函数。
按照此处的说明测试此功能。请注意,您需要使用三个单独的终端实例:
在第一个终端中,在本地项目内、端口 8043 上启动 Pub/Sub 模拟器:
gcloud beta emulators pubsub start \ --project=abc \ --host-port='localhost:8043'
在第二个终端中,创建一个 Pub/Sub 主题和订阅:
curl -s -X PUT 'http://localhost:8043/v1/projects/abc/topics/mytopic'
使用
http://localhost:8080
作为推送订阅的端点。curl -s -X PUT 'http://localhost:8043/v1/projects/abc/subscriptions/mysub' \ -H 'Content-Type: application/json' \ --data '{"topic":"projects/abc/topics/mytopic","pushConfig":{"pushEndpoint":"http://localhost:8080/projects/abc/topics/mytopic"}}'
在第三个终端中,将示例代码库克隆到您的本地机器:
Node.js
git clone https://github.com/GoogleCloudPlatform/nodejs-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Python
git clone https://github.com/GoogleCloudPlatform/python-docs-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
Go
git clone https://github.com/GoogleCloudPlatform/golang-samples.git
或者,您也可以下载该示例的 zip 文件并将其解压缩。
切换到包含 Cloud Run functions 函数示例代码的目录:
Node.js
cd nodejs-docs-samples/functions/v2/helloPubSub/
Python
cd python-docs-samples/functions/v2/pubsub/
Go
cd golang-samples/functions/functionsv2/hellopubsub/
查看示例代码:
Node.js
Python
Go
创建 Buildpack(可能需要几分钟的时间):
Node.js
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=helloPubSub \ my-function
Python
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=subscribe \ my-function
Go
pack build \ --builder gcr.io/buildpacks/builder:v1 \ --env GOOGLE_FUNCTION_SIGNATURE_TYPE=event \ --env GOOGLE_FUNCTION_TARGET=HelloPubSub \ my-function
在端口 8080 上启动 Pub/Sub 函数。模拟器会将推送消息发送到这里:
docker run --rm -p 8080:8080 my-function
在第二个终端中,通过发布一条消息来调用该函数。消息数据需要采用 base64 编码。此示例使用 base64 编码的字符串
{"foo":"bar"}
。curl -s -X POST 'http://localhost:8043/v1/projects/abc/topics/mytopic:publish' \ -H 'Content-Type: application/json' \ --data '{"messages":[{"data":"eyJmb28iOiJiYXIifQ=="}]}'
您应该会在第三个终端中看到函数输出。
按
Ctrl+C
即可取消。