“无法加载默认凭据”-使用仿真器的PubSub Node.js模块

时间:2018-11-29 10:05:31

标签: node.js google-cloud-platform google-cloud-pubsub

我在Node.js的PubSub模块上遇到问题。我已经使用Docker和PubSub仿真器创建了一个本地环境。我能够发布消息并使用异步请求(如此处记录的https://cloud.google.com/pubsub/docs/pull#asynchronous-pull)来检索它。但是,当我尝试使用同步拉(https://cloud.google.com/pubsub/docs/pull#synchronous-pull)时,仍然出现以下错误:

  

错误:无法加载默认凭据。浏览到   https://cloud.google.com/docs/authentication/getting-started了解更多   信息。在GoogleAuth。   (/var/code/node_modules/google-auth-library/build/src/auth/googleauth.js:167:23)   在下一个(本地)完成   (/var/code/node_modules/google-auth-library/build/src/auth/googleauth.js:19:58)   在process._tickCallback(内部/进程/next_tick.js:109:7)   (节点:493)PromiseRejectionHandledWarning:承诺被拒绝为   异步处理(拒绝ID:32)

每当我尝试实例化v1 PublisherClient或SubscriberClient时,都会发生此错误:

const pubsub = require('@google-cloud/pubsub');

new pubsub.v1.PublisherClient();
new pubsub.v1.SubscriberClient();

我觉得v1组件不能与仿真器一起使用,而是直接连接到云服务。 有没有办法使这些客户端连接到仿真器而不是云?我找不到... 谢谢!

2 个答案:

答案 0 :(得分:2)

我发现了如何解决此问题的方法:PublisherClient和SubscriberClient构造函数均具有用于设置仿真器路径的选项。选项为servicePathport。您还需要有效的凭据才能传递到使用sslCreds模块生成的grpc选项。下面是一个示例:

const grpc = require('grpc');

const subscriber = new pubsub.v1.SubscriberClient({
  servicePath: 'path.to.your.emulator',
  port: 8080, // port your emulator is running on (default is 443)
  sslCreds: grpc.credentials.createInsecure()
});

完整答案如下:https://github.com/googleapis/nodejs-pubsub/issues/346

答案 1 :(得分:1)

以下 TS 示例似乎对我有用。

import { PubSub, v1 } from "@google-cloud/pubsub";
import * as gax from "google-gax";

if (process.env.PUBSUB_EMULATOR_HOST) {
    const pieces = process.env.PUBSUB_EMULATOR_HOST.split(":");

    options = {
        servicePath: pieces[0],
        port: pieces[1],
        isEmulator: true,
        sslCreds: gax.grpc.credentials.createInsecure(),
    };
}
const subClient = new v1.SubscriberClient(options);