2017-02-01 20 views
0

Наше приложение Java работает на Google App Engine. Он использует PubSub Google для публикации и потребления сообщений.Работает ли эмулятор Google PubSub с клиентской библиотекой Google Cloud Pub/Sub API?

Есть два клиента Java для Google PubSub. Клиент gRPC рекомендуется, но, как указано в нижней части этой страницы, https://cloud.google.com/pubsub/grpc-overview не поддерживается в Google App Engine.

Другая библиотека является Google Cloud Pub/Sub API Client - https://developers.google.com/api-client-library/java/apis/pubsub/v1

При использовании клиента КПГР 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 бета эмуляторы PubSub начать --host-порт = локальный: 8321

Фактический номер порта не важен. Затем, разумеется, темы и подписки должны быть настроены кодом каждый раз при перезапуске эмулятора.

+0

Только то, что я искал ... установил его в коде при создании клиента и запуске эмулятора с выделенным портом. –

1

Я смог подключить Java API lib к эмулятору. После того как я начал эмулятор: gcloud бета эмуляторы PubSub начать

Я экспортировал свой адрес: экспорт PUBSUB_EMULATOR_HOST = LOCALHOST: EMULATOR_PORT

+1

Я не смог подтвердить это, но вы можете быть правы. Я не был уверен, как установить PUBSUB_EMULATOR_HOST при запуске нашего приложения GAE из Intellij. Конфигурация запуска для Google AppEngine Dev Server не имеет места для размещения env vars. Может быть, есть способ сделать это, о котором я не знаю. –