我在以下链接中读到,我必须使用以下命令在本地启动一个pub / sub实例:gcloud beta emulators pubsub env-init && gcloud beta emulators pubsub start
:
https://cloud.google.com/pubsub/docs/emulator
这很好,实例已启动并运行。
我不明白的是,当我启动node.js应用程序时,它似乎不与此实例交互。
我能够在没有本地运行的发布/订阅模拟器实例的情况下使用进行以下工作:
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.`);
我认为它可能会违反我在云上的项目,但是因为我还运行gcloud beta emulators pubsub env-init
它应该使用本地项目。如上所述它似乎工作,即使我没有开始。
我想知道我是否误解了它在本地开发中的运作方式。以下是我读过的内容。
gcloud beta emulators pubsub env-init
gcloud 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
答案 0 :(得分:0)
通常,您需要运行
$ gcloud beta emulators pubsub start
$ $(gcloud beta emulators pubsub env-init)
在启动Node应用程序之前。
env-init
命令将导出一个环境变量(PUBSUB_EMULATOR_HOST
),该环境变量将由Node应用程序中的Nodejs PubSub客户端库自动获取,从而使其连接到仿真器而不是全局连接器。 Google Cloud Pubsub。
要验证您的应用程序可以看到此变量,可以添加以下内容:
assert(process.env.PUBSUB_EMULATOR_HOST);
在创建PubSub
实例时。
请注意:
pubsub start
应该在env-init
之前发生,因为后者取决于前者选择的动态端口env-init
定义的环境变量需要注入到本地终端中,以便Nodejs应用程序可以看到它。这就是为什么我们需要使用bash $()
语法包装它。 (不幸的是,似乎测试Nodejs push endpoints with the PubSub emulator via functions-framework is broken,所以根据您与PubSub的交互方式,您可能需要调整本地测试的策略。其他主题操作似乎可以正常工作。)