繁体   English   中英

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

[英]"Could not load the default credentials" - PubSub Node.js module using the Emulator

我在使用 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) at process._tickCallback (internal/process/next_tick.js:109:7) (node:493) PromiseRejectionHandledWarning:Promise 拒绝被异步处理(拒绝 ID:32)

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

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

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

我觉得 v1 组件不适用于模拟器,而是直接连接到云服务。 有没有办法让这些客户端连接到模拟器而不是云? 我找不到任何...谢谢!

我找到了解决这个问题的方法:PublisherClient 和 SubscriberClient 构造函数都有设置模拟器路径的选项。 选项是servicePathport 您还需要有效的凭据才能传递给使用grpc模块生成的sslCreds选项。 下面是一个示例:

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

以下 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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM