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

基于Google Cloud Run、FastAPI与Meta WhatsApp API的响应问题求助

单服务解决方案

针对你的问题,以下是几个无需开启Cloud Run「始终运行」、也不用拆分微服务的单服务层面可行方案:

方案1:调整Cloud Run闲置超时 + FastAPI BackgroundTasks

  • 核心逻辑:让Cloud Run实例在LLM任务处理期间保持活跃,任务完成后自动进入闲置状态并关闭
  • 操作步骤:
    1. 在Cloud Run控制台,将实例闲置超时时间设置为你的LLM任务最长处理时长(Cloud Run支持最长15分钟闲置超时,可根据实际需求调整)
    2. 继续使用FastAPI的BackgroundTasks处理LLM逻辑,收到WhatsApp消息后立即返回200状态码
    3. 注意:单实例场景下完全适配;若服务需扩缩容为多实例,内存型任务队列可能导致任务丢失,此时可优先考虑其他方案

方案2:后台任务保活机制

  • 核心逻辑:通过内部保活请求,让Cloud Run判定实例始终有活跃请求,直到LLM任务完成
  • 操作步骤:
    1. 在FastAPI服务中添加一个简单的健康检查端点:
      from fastapi import FastAPI
      import aiohttp
      import asyncio
      
      app = FastAPI()
      
      @app.get("/health")
      async def health_check():
          return {"status": "ok"}
      
    2. 在LLM处理的后台任务中,启动一个异步保活子任务,每隔30秒发送一次GET请求到/health端点:
      async def keep_alive():
          async with aiohttp.ClientSession() as session:
              while True:
                  await session.get("http://localhost:8080/health")
                  await asyncio.sleep(30)
      
    3. 当LLM任务完成后,立即终止保活子任务,实例会在闲置超时后自动关闭
  • 优势:无需调整Cloud Run全局配置,适配多实例场景

方案3:单服务集成Pub/Sub队列

  • 核心逻辑:用Pub/Sub做异步任务队列,但不拆分服务,实现消息接收与LLM处理的解耦
  • 操作步骤:
    1. 在Google Cloud控制台创建一个Pub/Sub主题和订阅
    2. 在FastAPI服务的lifespan事件中启动异步订阅者,持续拉取队列任务并处理LLM逻辑
    3. 收到WhatsApp消息后,立即返回200状态码,同时将任务参数(如用户ID、消息内容)发布到Pub/Sub主题
    4. 订阅者拉取到任务后,调用LLM生成回复,再通过WhatsApp Cloud API发送给用户
  • 优势:即使Cloud Run实例返回200后关闭,后续有新任务时会自动启动实例处理,任务不会丢失;仅在处理任务时实例运行,成本可控

内容的提问来源于stack exchange,提问作者millsy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 20:57:15