PubSub消息验证含多联合类型的AVRO JSON Schema失败求助
关联AVRO Schema的PubSub主题消息发布失败问题
使用PHP的Google\Cloud\PubSub\PubSubClient库向关联AVRO Schema的新PubSub主题发布消息时,收到如下400错误:
{ "error": { "code": 400, "message": "Invalid data in message: Message failed schema validation.", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.ErrorInfo", "reason": "INVALID_JSON_AVRO_MESSAGE", "domain": "pubsub.googleapis.com", "metadata": { "message": "Message failed schema validation", "revisionInfo": "Could not validate message with any schema revision for schema: projects/foo-project/schemas/foo-schema, last checked revision: revision_id=foo-revision-id failed with status: Invalid data in message: JSON object with type string does not match schema which expected object." } } ] } }
已尝试的操作
- 在Google Cloud Console的Schema详情页使用UI测试消息功能验证,所有组合均返回错误:
Invalid JSON -encoded message against Avro schema.,无额外详细信息。 - 尝试添加值为
null的可选字段、将action_type嵌套在action字段中、在account对象内添加"name": null等操作,均未解决问题。 - 用avro_validator工具验证消息格式,结果显示格式正确。
示例消息
{ "action": "create", "url": "https://my-api.com/resource/new_resource_name", "operation": "created", "callback_url": "https://my-another-api/com/resource/new_resource_name", "name": "new_resource_name", "source": "service_name", "account": {"number": 2830602}, "operation_metadata": "{\"created_on\":\"2024-06-24T08:47:14+00:00\"}" }
GCP中创建的Schema
{ "fields": [ { "name": "action", "type": [ "null", { "name": "action_type", "symbols": [ "create", "another_action_type", "another_action_type2", "another_action_type3" ], "type": "enum" } ] }, { "name": "url", "type": "string" }, { "name": "operation", "type": { "name": "operation_type", "symbols": [ "created", "another_operation_type", "another_operation_type2", "another_operation_type3" ], "type": "enum" } }, { "name": "callback_url", "type": "string" }, { "name": "name", "type": "string" }, { "default": "default_service_name", "name": "source", "type": { "name": "source_service", "symbols": [ "service_name1", "service_name2" ], "type": "enum" } }, { "default": null, "name": "homepage_url", "type": [ "null", "string" ] }, { "default": null, "name": "account", "type": [ "null", { "fields": [ { "default": null, "name": "number", "type": [ "null", "int" ] }, { "default": null, "name": "name", "type": [ "null", "string" ] } ], "name": "account_record", "type": "record" } ] }, { "default": null, "name": "cluster", "type": [ "null", { "fields": [ { "default": null, "name": "number", "type": [ "null", "int" ] } ], "name": "cluster_record", "type": "record" } ] }, { "default": null, "name": "type", "type": [ "null", { "name": "environment_type", "symbols": [ "DEVELOPMENT", "STAGING", "PRODUCTION" ], "type": "enum" } ] }, { "default": null, "name": "error", "type": [ "null", "string" ] }, { "default": null, "name": "operation_metadata", "type": [ "null", "string" ] } ], "name": "MyFooEvents", "type": "record" }
求解决思路或提示。
内容的提问来源于stack exchange,提问作者gregp
相关产品推荐
相关产品推荐

