Как подключить Spring gcp PubSubTemplate к локальному экземпляру?
Я использую пружинный стартер spring-cloud-gcp-starter-pubsub
а также PubSubTemplate
, он отлично работает с реальным GCP, но теперь я хочу использовать его для своих тестов с локальным эмулятором Google PubSub. Как я могу предоставить свой собственный URL, порт и без учетных данных?
или я должен вернуться к использованию простого Google SDK, как в этом примере
РЕДАКТИРОВАТЬ:
у меня есть только один компонент в моем приложении:
@Service
class TestLocalPubsub(pubSubTemplate: PubSubTemplate)
а также
application.properties:
spring.cloud.gcp.pubsub.emulator-host=localhost:8085
и когда я запускаю приложение, я получаю:
Причина: java.io.IOException: учетные данные приложения по умолчанию недоступны. Они доступны, если работают в Google Compute Engine. В противном случае должна быть определена переменная среды GOOGLE_APPLICATION_CREDENTIALS, указывающая на файл, определяющий учетные данные. См. https://developers.google.com/accounts/docs/application-default-credentials для получения дополнительной информации. на com.google.auth.oauth2.DefaultCredentialsProvider.getDefaultCredentials(DefaultCredentialsProvider.java:132) ~[google-auth-library-oauth2-http-0.12.0.jar:na] ...
но, конечно, ссылка говорит о gcloud SDK, а не pubsubtemplate
1 ответ
Как упоминалось в сообщении, которое вы связали, существует несколько способов заставить Spring подключиться к эмулятору:
- Установите переменную среды
SPRING_CLOUD_GCP_PUBSUB_EMULATORHOST=locahost:8085
(если используется порт эмулятора по умолчанию - Или установить
spring.cloud.gcp.pubsub.emulator-host=localhost:8085
в свойствах приложения Spring
Для тестов вы можете использовать второй метод, создав application.properties в test / main / resources и установив spring.cloud.gcp.pubsub.emulator-host=localhost:8085
, Вам не нужно переопределять какие-либо пользовательские учетные данные.
Чтобы ваши тесты работали с эмулятором, вам необходимо заранее создать темы и подписки в эмуляторе. В документах GCP показано, как сделать это вручную, установив библиотеку Python Google Cloud Client: https://cloud.google.com/pubsub/docs/emulator. В противном случае ваши тесты должны создавать их с помощью SDK.
Вот полный пример использования Spring с эмулятором pubsub и создания темы / подписки с использованием Java SDK: https://github.com/nhartner/pubsub-emulator-demo