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

Posted

技术标签:

【中文标题】如何将 spring gcp PubSubTemplate 连接到本地实例?【英文标题】:How to connect spring gcp PubSubTemplate to local instance? 【发布时间】:2019-07-26 02:27:58 【问题描述】:

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

或者我必须像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

【问题讨论】:

你能发布完整的堆栈跟踪吗?我 检查this的答案,可能会有帮助。 Spring Boot cloud GCP cannot connect to local Google PubSub emulator的可能重复 【参考方案1】:

正如您链接的帖子中提到的,有几种方法可以让 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 客户端库手动执行此操作:https://cloud.google.com/pubsub/docs/emulator。否则,您的测试需要使用 SDK 创建它们。

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

【讨论】:

您绝对不需要模拟器的凭据,这意味着它不会尝试使用模拟器。我可能错误地认为您使用的是 spring-cloud-gcp-starter-pubsub 库。你有这种依赖吗?如果没有,那么弹簧属性将不起作用。如果设置环境变量 PUBSUB_EMULATOR_HOST=localhost:8085 会发生什么?如果您不使用我提到的库,那是 GCP SDK 使用的 env 变量。 请查看我的示例项目以了解如何在测试中使用模拟器:github.com/nhartner/pubsub-emulator-demo

以上是关于如何将 spring gcp PubSubTemplate 连接到本地实例?的主要内容,如果未能解决你的问题,请参考以下文章

Spring Cloud Stream GCP如何重新排队失败的消息

无法使用 spring cloud gcp starter 将 Spring Boot 与 Cloud SQL 连接

将 GCP 订阅者与 Spring Boot 集成会导致内存致命错误

将 Spring Data JPA 与 GCP Spanner 集成

Spring Boot GCP:将 PubSub 应用程序部署到 App Engine 标准环境时出现“Google 凭据”异常

Spring 数据流和 GCP Pub Sub