You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot应用部署到Google Cloud后Pub/Sub订阅者被立即移除问题求助

问题根因

  1. 订阅者被自动移除的核心原因:你的应用部署在Google Cloud Run上,Cloud Run默认是请求驱动的无服务运行环境,默认开启自动缩容策略,当实例没有收到HTTP请求时,会在设定的空闲超时后自动销毁实例。销毁过程会触发Spring Boot的优雅关闭钩子,执行所有Bean的销毁逻辑,自然会停掉Pub/Sub入站适配器,移除对应的订阅者。你的日志中明确出现了ionShutdownHook线程执行的记录,也验证了是实例被主动销毁导致的问题。
  2. 替换依赖后启动失败的原因:版本不兼容。org.springframework.cloud:spring-cloud-gcp:1.2.8.RELEASE最高仅支持Spring Boot 2.3.x,和你使用的Spring Boot 2.5.5存在大量类版本冲突,导致应用启动失败无法监听指定端口,所以Cloud Run抛出端口监听失败的错误。

解决方案

方案1:调整Cloud Run配置(最便捷)

如果要继续使用Cloud Run部署Pub/Sub订阅应用,可根据业务场景二选一:

  • 若要保留拉模式订阅的实现:关闭自动缩容到0的特性,设置最小实例数为1,同时延长空闲超时时间最长可到3600秒。注意该配置会产生持续的实例运行费用。
  • 改用Pub/Sub推送模式:修改Pub/Sub订阅为推送类型,推送端点设置为你的Cloud Run服务的HTTP接口,该模式符合Cloud Run请求驱动的特性,空闲时可以正常缩容到0,有消息时自动拉起实例处理,不用自己维护长连接的订阅者逻辑。

方案2:更换适配长驻应用的部署方式

如果你的应用核心逻辑就是处理Pub/Sub消息,对外HTTP接口很少,建议改用更适合长驻进程的部署载体:

  • Google Compute Engine(GCE)虚拟机,长期运行实例
  • Google Kubernetes Engine(GKE),设置Deployment的最小副本数为1
  • Cloud Functions,直接对接Pub/Sub触发事件,无需自己维护订阅者实现

方案3:修复依赖版本

如果要保留拉模式订阅的代码实现,不要降级到旧版本org.springframework.cloud组下的依赖,保持原有com.google.cloud组下的2.0.4版本即可,该版本本身兼容Spring Boot 2.5.5,只要解决Cloud Run的缩容问题就能正常运行。

内容的提问来源于stack exchange,提问作者Miłosz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:24:03