Работает ли эмулятор Google PubSub с клиентской библиотекой Google Cloud Pub / Sub API?

Наше приложение Java работает на Google App Engine. Он использует PubSub Google для публикации и использования сообщений.

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

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

При использовании клиентской библиотеки gRPC было легко начать работать с эмулятором pubsub. Просто установите свойство среды и готово.

Работает ли клиент API PubSub с эмулятором Google PubSub?

Наша цель при локальном запуске нашего приложения - иметь возможность использовать эмулятор PubSub вместо подключения к живому экземпляру в облаке.


person Wade Garrett    schedule 01.02.2017    source источник


Ответы (2)


Это работает, но клиент PubSub необходимо правильно настроить в соответствии с портом, который использует эмулятор.

Это код, который я использую для создания клиента PubSub. Он основан на Образец PubSub. Обратите внимание на часть 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 start --host-port = localhost: 8321

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

person Þórir Gunnarsson    schedule 06.02.2017
comment
Именно то, что я искал ... установил это в коде при создании клиента и запустил эмулятор с выделенным портом. - person Wade Garrett; 07.02.2017

Мне удалось подключить библиотеку Java API к эмулятору. После того, как я запустил эмулятор: бета-эмуляторы gcloud pubsub start

Я экспортировал его адрес: export PUBSUB_EMULATOR_HOST = localhost: EMULATOR_PORT

person Manhal Daaboul    schedule 03.02.2017
comment
Я не смог подтвердить это, но вы могли быть правы. Я не знал, как установить PUBSUB_EMULATOR_HOST при запуске нашего приложения GAE из Intellij. Конфигурация запуска для Google AppEngine Dev Server не имеет места для размещения переменных env. Может быть, есть способ сделать это, о котором я не знаю. - person Wade Garrett; 07.02.2017