2017-02-01 4 views
0

Java AppはGoogle App Engine上で動作します。 GoogleのPubSubを使用してメッセージを公開し、消費しています。Google PubSubエミュレータはGoogle Cloud Pub/Sub APIクライアントライブラリで動作しますか?

Google PubSubには2つのJavaクライアントがあります。 gRPCクライアントが推奨されていますが、このページの末尾に記載されているように、https://cloud.google.com/pubsub/grpc-overviewはGoogle App Engineではサポートされていません。それはのpubsubエミュレータでの作業を取得するのは簡単だったlibにgRPCクライアントを使用する場合https://developers.google.com/api-client-library/java/apis/pubsub/v1

-

他のライブラリは、Googleクラウドパブ/サブAPIクライアントです。ちょうど環境プロパティを設定し、完了します。

PubSub APIクライアントはGoogle PubSubエミュレータで動作しますか?

アプリケーションをローカルで実行するときの目標は、クラウドのライブインスタンスに接続するのではなく、PubSubエミュレータを使用できるようにすることです。

答えて

3

は、これは動作しますが、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

実際のポート番号は重要ではありません。もちろん、エミュレータを再起動するたびにトピックとサブスクリプションをコードごとに設定する必要があります。

+0

ちょうど私が探していたのは...クライアントをビルドし、エミュレータを専用ポートで起動するときにコードで設定します。 –

1

私は、Java API libをエミュレータに接続することができました。私はエミュレータを開始した後 は: 輸出PUBSUB_EMULATOR_HOST = localhostを:: のgcloudベータエミュレータが

を開始PubSubのを私はそのアドレスをエクスポートEMULATOR_PORT

+1

私はこれを確認することができませんでしたが、あなたはIntellijからGAEアプリケーションを実行するときにPUBSUB_EMULATOR_HOSTを設定する方法がわかりませんでした。 Google App Engineer Dev Serverの実行設定にenv varsを入れる場所がありません。たぶん私はこれをする方法がありません。 –

関連する問題