2

我正在使用 Spring Boot Starterspring-cloud-gcp-starter-pubsubPubSubTemplate. 它与实际的 GCP 完美配合,但现在我想将它用于本地 Google PubSub 模拟器的测试。如何提供我的自定义 url、端口和无凭据?

或者我必须恢复使用普通的 google sdk,如本例所示


编辑

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

@Service
class TestLocalPubsub(pubSubTemplate: PubSubTemplate)

应用程序属性:

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

4

1 回答 1

2

如您链接的帖子中所述,有几种方法可以让 spring 连接到模拟器:

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

对于测试,您可以通过在 test/main/resources 中创建 application.properties 并设置来使用第二种方法spring.cloud.gcp.pubsub.emulator-host=localhost:8085。您不需要覆盖任何自定义凭据。

为了让您的测试与模拟器一起使用,您需要提前在模拟器中创建主题和订阅。GCP 文档展示了如何通过安装 Python Google Cloud 客户端库手动执行此操作:https ://cloud.google.com/pubsub/docs/emulator 。否则,您的测试需要使用 SDK 创建它们。

这是一个使用 Spring 和 pubsub 模拟器并使用 Java SDK 创建主题/订阅的完整示例:https ://github.com/nhartner/pubsub-emulator-demo

于 2019-03-04T18:36:07.740 回答