2017-02-01 74 views
0

我們的Java應用程序在Google App Engine上運行。它使用Google的PubSub發佈和使用消息。Google PubSub仿真器是否可以與Google雲端Pub/Sub API客戶端庫一起使用?

有兩個用於Google PubSub的Java客戶端。建議使用gRPC客戶端,但正如本頁底部所述,Google App Engine不支持https://cloud.google.com/pubsub/grpc-overview

其他圖書館是谷歌Cloud發佈/訂閱API客戶端 - https://developers.google.com/api-client-library/java/apis/pubsub/v1

當使用GRPC客戶端的lib很容易獲得與PubSub的仿真工作。只需設置一個環境屬性並完成。

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端口=本地主機:8321

實際端口號並不重要。當然,每次重新啓動模擬器時,主題和訂閱都需要通過代碼進行配置。

+0

正是我正在尋找的......在構建客戶端並使用專用端口啓動模擬器時將其設置在代碼中。 –

1

我能夠將Java API庫連接到模擬器。 後,我開始模擬器: gcloud測試模擬器發佈訂閱啓動

我出口公司地址: 出口PUBSUB_EMULATOR_HOST =本地主機:EMULATOR_PORT

+1

我無法證實這一點,但你可能是正確的我不知道如何設置PUBSUB_EMULATOR_HOST運行我們從Intellij GAE應用程序。 Google AppEngine Dev Server的運行配置沒有放置環境變量的地方。也許有一種方法可以做到這一點我不知道。 –

相關問題