Kar*_*son 6 google-app-engine node.js google-cloud-platform google-cloud-pubsub
我在以下链接中读到,我必须使用以下命令在本地启动一个发布/订阅实例gcloud beta emulators pubsub env-init && gcloud beta emulators pubsub start:
https://cloud.google.com/pubsub/docs/emulator
这很好,并且实例已启动并正在运行。
我不明白的是,当我启动 node.js 应用程序时,它似乎没有与这个实例交互。
我能够在没有本地运行的 pub/sub 模拟器实例的情况下进行以下工作:
const subscription = pubsub.subscription(topicName);
// Register a listener for `message` events.
subscription.on('message', (message) => {
console.log('->', message);
});
const results = await pubsub.topic('my-new-topic').publish('my message');
const messageIds = results[0];
console.log(`Message ${messageIds[0]} published.`);
Run Code Online (Sandbox Code Playgroud)
我认为它可能会违背我在云上的项目,但是因为我也运行了gcloud beta emulators pubsub env-init它应该使用本地的。如前所述,即使我还没有开始,它似乎也有效。
我想知道我是否误解了它在本地开发中的工作方式。以下是我阅读的内容。
gcloud beta emulators pubsub env-initgcloud beta emulators pubsub start我希望谷歌有时只做一个简单的项目符号列表,并使深度阅读成为可选。
这是它的外观:
karl@karl-Dell-Precision-M3800:~/dev/node(dev/feat/setup)$ ps aux | grep pubsub
karl 19538 0.0 0.0 4512 848 pts/1 S+ 14:52 0:00 /bin/sh /opt/google-cloud-sdk/bin/gcloud beta emulators pubsub start --verbosity=info
karl 19545 1.2 0.2 88796 32760 pts/1 S+ 14:52 0:00 python2 -S /opt/google-cloud-sdk/lib/gcloud.py beta emulators pubsub start --verbosity=info
karl 19570 4.0 0.3 6982280 64888 pts/1 Sl+ 14:52 0:00 /usr/lib/jvm/java-8-oracle//bin/java -jar /opt/google-cloud-sdk/platform/pubsub-emulator/lib/cloud-pubsub-emulator-0.1-SNAPSHOT-all.jar --host=localhost --port=8085
Run Code Online (Sandbox Code Playgroud)
一般来说,你需要运行
$ gcloud beta emulators pubsub start
$ $(gcloud beta emulators pubsub env-init)
Run Code Online (Sandbox Code Playgroud)
在启动 Node 应用程序之前。
该env-init命令将导出一个环境变量 ( PUBSUB_EMULATOR_HOST),该变量将由 Node 应用程序中的 Nodejs PubSub 客户端库自动获取,从而使其连接到模拟器而不是全局 Google Cloud Pubsub。
要验证您的应用程序是否可以看到此变量,您可以添加以下内容:
assert(process.env.PUBSUB_EMULATOR_HOST);
Run Code Online (Sandbox Code Playgroud)
在您创建实例的地方PubSub。
注意:
pubsub start应该发生在之前env-init,因为后者取决于前者选择的动态端口env-init需要注入本地终端,以便您的 Nodejs 应用程序可以看到它。这就是为什么我们需要将其包装在 bash$()语法中。(不幸的是,通过函数框架使用 PubSub 模拟器测试 Nodejs 推送端点似乎已被破坏,因此根据您与 PubSub 交互的方式,您可能必须调整本地测试策略。其他主题操作似乎按预期工作.)
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |