GCP Pub/Sub拉取消息为空:Cloud Functions发布订阅异常排查
订阅端解码Pub/Sub CloudEvent消息为空的原因
以下是几种常见的触发原因:
CloudEvent嵌套结构未正确解析
通过CloudEvent接收Pub/Sub消息时,原始消息会被封装在CloudEvent的data字段的嵌套结构里。正确的结构示例:{ "data": { "@type": "type.googleapis.com/google.pubsub.v1.PubsubMessage", "data": "Base64编码的原始JSON内容", "attributes": {} } }如果订阅端直接读取顶层
data就尝试解码,而没有先提取内部的data字段并做Base64解码,就会得到空结果。发布端与订阅端编码方式不匹配
发布端若将XeroTenant序列化为JSON字符串后,未做Base64编码就构建PubsubMessage,但订阅端按照Pub/Sub CloudEvent的默认规则(默认消息体为Base64编码)去解码,会因格式不匹配导致解码失败,最终得到空内容。CloudEvent数据类型配置错误
若订阅端的CloudEvent配置了错误的datacontenttype(比如发布端发送的是application/json,但订阅端期望其他格式),或者反序列化逻辑未正确处理JSON结构,也会导致解码后内容为空。消息内容存放位置错误
发布端构建PubsubMessage时,误将XeroTenant的JSON内容放到了attributes字段而非data字段,导致订阅端从data字段读取不到有效数据。
内容的提问来源于stack exchange,提问作者Pavanraotk
相关产品推荐
相关产品推荐

