は、これは動作しますが、PubSubのクライアントは、エミュレータがあるポートに対して正しく設定する必要がありますを使用して。
これは私がPubSubクライアントを作成するために使用するコードです。それはPubSub Sampleに基づいています。 setRootUrl部分に注目してください。
private Pubsub getClient(final HttpTransport httpTransport, final JsonFactory jsonFactory) {
Preconditions.checkNotNull(httpTransport);
Preconditions.checkNotNull(jsonFactory);
GoogleCredential credential = null;
try {
credential = GoogleCredential.getApplicationDefault();
} catch (IOException e) {
e.printStackTrace();
}
if (credential.createScopedRequired()) {
credential = credential.createScoped(PubsubScopes.all());
}
// Please use custom HttpRequestInitializer for automatic
// retry upon failures.
HttpRequestInitializer initializer = new RetryHttpInitializerWrapper(credential);
Pubsub.Builder pubsubBuilder = new Pubsub.Builder(httpTransport, jsonFactory, initializer);
pubsubBuilder.setApplicationName("<your project id>");
//Check if this is localhost
if (SystemProperty.environment.value() != SystemProperty.Environment.Value.Production) {
pubsubBuilder.setRootUrl("http://localhost:8321/");
}
return pubsubBuilder.build();
}
は、次に使用してエミュレータを起動します。
のgcloudベータエミュレータが--hostポートを起動するのpubsub = localhostを:8321
実際のポート番号は重要ではありません。もちろん、エミュレータを再起動するたびにトピックとサブスクリプションをコードごとに設定する必要があります。
ちょうど私が探していたのは...クライアントをビルドし、エミュレータを専用ポートで起動するときにコードで設定します。 –