我尝试在本地运行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')
});
答案 0 :(得分:1)
我遇到了这个问题。
在研究它时,我发现了以下帖子:“没有什么是错的。当使用模拟器时,我们没有传递凭据,这就是日志告诉你的,没有任何身份验证标头提供任何请求。” - https://www.bountysource.com/issues/39093553-pubsub-emulator-authinterceptor-question
我的消息在研究主题时开始发布,所以这可能只是一个延迟。
答案 1 :(得分:0)
标题值null为红色。看起来dotnet sdk并不像nodejs sdk那样尊重环境变量。我与jskeet通信,他创建了一个问题来添加文档,以展示如何启用模拟器:https://github.com/GoogleCloudPlatform/google-cloud-dotnet/issues/859
这是我在C#中创建PublisherClient的方式
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);
}
}