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
相关产品推荐
相关产品推荐

