1

Ich habe versucht, den Pubsub-Emulator lokal auszuführen und ihm Nachrichten mit vorhandenen Diensten zu senden, die ich auf Pubsub ausgeführt habe. Nachrichten wurden nicht empfangen, und alles, was ich bekomme, sind Auth-Fehler in den Protokollen.Gcloud Pubsub-Emulator respektiert die Umgebungsvariable "PUBSUB_EMULATOR_HOST"

[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 

Ich mache Anfragen zu veröffentlichen und ziehen von beiden dotnet und 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') 
}); 

Antwort

0

Der Header-Wert null war ein roter Harring. Es sieht so aus, als würde der dotnet sdk die Umgebungsvariable nicht wie die nodejs sdk einhalten. Ich korrespondierte mit jskeet und er schuf ein Problem in der Dokumentation hinzufügen zu zeigen, wie die Verwendung des Emulators zu aktivieren: https://github.com/GoogleCloudPlatform/google-cloud-dotnet/issues/859

Hier ist, wie ich die PublisherClient in C# erstellt

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); 
    } 
} 
1

lief ich auf dieses Problem in.

Während ich es erforsche, fand ich den folgenden Beitrag: "Nichts läuft schief. Bei der Verwendung des Emulators übergeben wir keine Anmeldeinformationen und das ist, was die Protokolle Ihnen sagen, dass keine Authentifizierung Header mit einer der Anfragen zur Verfügung gestellt wurde. " - https://www.bountysource.com/issues/39093553-pubsub-emulator-authinterceptor-question

Meine Nachrichten begannen zu veröffentlichen, während das Thema erforscht, so ist es wahrscheinlich nur eine Verzögerung.