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

PubSub模拟器推送订阅触发HTTP服务但无请求体问题求助

推送订阅无请求体的排查方案

你的配置代码:

const subscription = topic.subscription("subscription");
const [exists] = await subscription.exists();
if (exists) {
    await subscription.delete();
}

await subscription.create({
    pushConfig: {
        pushEndpoint: `http://localhost:${PORT}`
    },
});

给你几个实打实的排查方向:

  • 先检查服务器的请求体解析逻辑
    Pub/Sub推送的是JSON格式请求体,你的HTTP服务必须正确配置JSON解析中间件。比如用Express的话,一定要加app.use(express.json()),不然服务器根本读不到请求体内容——这是最常见的坑。

  • 验证订阅配置有没有限制消息传递
    默认情况下Pub/Sub会完整推送消息内容,但如果创建订阅时不小心加了filter过滤规则,或者错误配置了attributes相关参数,可能导致消息被截断或过滤。检查下create方法的参数,有没有额外的限制项。

  • 用模拟请求测试服务器
    直接用curl发一个模拟的Pub/Sub请求到你的本地端口,看看服务器能不能收到请求体:

    curl -X POST http://localhost:3000 \
    -H "Content-Type: application/json" \
    -d '{
      "message": {
        "data": "SGVsbG8gV29ybGQh",
        "attributes": {"test": "value"}
      },
      "subscription": "projects/xxx/subscriptions/xxx"
    }'
    

    如果这个模拟请求也收不到体,那问题肯定在服务器代码,和Pub/Sub无关。

  • 查Pub/Sub的推送日志
    去Pub/Sub控制台找对应订阅的日志,看看推送记录里有没有异常。如果日志显示推送成功但服务器没收到体,可能是本地防火墙、代理工具拦截了请求体,或者服务器的端口映射有问题。

  • 确认发布的消息本身有内容
    检查你发布到topic的消息是不是空的。如果发布时没设置data字段,或者data是空值,那推送过来自然没有请求体内容。发布消息时记得用Buffer.from()包装内容,比如:

    await topic.publishMessage({
      data: Buffer.from("实际消息内容")
    });
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 02:05:16