如何将Spring gcp PubSubTemplate连接到本地实例?

时间:2019-03-04 17:58:48

标签: java spring-boot spring-cloud google-cloud-pubsub spring-cloud-gcp

我正在使用Spring Boot Starter spring-cloud-gcp-starter-pubsubPubSubTemplate。它与实际的GCP完美配合,但是现在我想将其用于本地Google PubSub模拟器的测试中。如何提供我的自定义网址,端口和没有凭据?

或者我必须恢复为使用this example中的纯Google sdk


编辑

我的应用程序中只有一个bean:

@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 个答案:

答案 0 :(得分:0)

如您所链接的文章中所述,有几种方法可以使spring连接到模拟器:

  • 设置环境变量SPRING_CLOUD_GCP_PUBSUB_EMULATORHOST=locahost:8085(如果使用默认的仿真器端口
  • 或在您的Spring应用程序属性中设置spring.cloud.gcp.pubsub.emulator-host=localhost:8085

对于测试,您可以通过在test / main / resources中创建application.properties并设置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