Эмулятор pubsub GCloud не поддерживает переменную окружения "PUBSUB_EMULATOR_HOST"

Я попытался запустить эмулятор pubsub локально и отправить ему сообщения с существующими службами, которые у меня запущены на pubsub. Сообщения не были получены, и все, что я получаю, - это ошибки аутентификации в журналах.

[pubsub] Jan 22, 2017 3:43:16 PM com.google.cloud.iam.testing.v1.shared.authorization.AuthInterceptor interceptCall
[pubsub] INFO: Authentication interceptor: Header value is null
[pubsub] Jan 22, 2017 3:43:16 PM com.google.cloud.iam.testing.v1.shared.authorization.AuthInterceptor interceptCall
[pubsub] INFO: Authentication interceptor: invalid or missing token

Я делаю запросы на публикацию и получение как от dotnet, так и от nodejs.

C#

var creds = GoogleCredential.GetApplicationDefaultAsync().Result;
if (creds.IsCreateScopedRequired) {
    creds = creds.CreateScoped(new [] { PubsubService.Scope.Pubsub } );
}

return new PubsubService(
    new BaseClientService.Initializer() {
        HttpClientInitializer = creds,
        ApplicationName = "My Wonderful App"
    }
);

NodeJs

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

var pubsubClient = pubsub({
  projectId: config.get('GCLOUD_PROJECT')
});

2 ответа

Решение

Значение заголовка null было красным заголовком. Похоже, что dotnet SDK не учитывает переменную окружения, как это делает nodejs SDK. Я переписывался с jskeet, и он создал проблему для добавления документации, показывающей, как разрешить использование эмулятора: https://github.com/GoogleCloudPlatform/google-cloud-dotnet/issues/859

Вот как я создал PublisherClient в C#

private static PublisherClient CreatePublisherClient() {
    var emulatorHostAndPort = Environment.GetEnvironmentVariable("PUBSUB_EMULATOR_HOST");
    if (String.IsNullOrWhiteSpace(emulatorHostAndPort)) {
        return PublisherClient.Create();
    } else {
        var channel = new Channel(emulatorHostAndPort, ChannelCredentials.Insecure);
        return PublisherClient.Create(channel);
    }
}

Я столкнулся с этой проблемой.

Исследуя его, я обнаружил следующий пост: "Ничего не происходит неправильно. При использовании эмулятора мы не передаем учетные данные, и именно об этом говорят журналы, что ни один из запросов не предоставлял заголовок аутентификации". - https://www.bountysource.com/issues/39093553-pubsub-emulator-authinterceptor-question

Мои сообщения начали публиковаться во время исследования темы, так что, вероятно, это просто задержка.

Другие вопросы по тегам