排查载荷解封问题

本页面介绍了如何解决载荷解封装问题。

HTTP 状态代码错误

使用载荷解封装时,可能会出现常见的 HTTP 状态代码错误。 您可以使用 push_request_count 指标监控这些错误。

400 无效请求

如果 Pub/Sub 因配置错误或缺少数据而无法处理请求,则会发生以下错误。

400 Bad Request

此错误有多种原因。以下是一些最 常见的错误原因:

  • 载荷(消息数据)与 HTTP 端点指定的预期请求格式不匹配。
  • 缺少处理请求所需的标头。
  • 为订阅配置了错误的 HTTP 端点。

如需解决此问题,请尝试以下解决方案:

  • 检查载荷(消息数据)的格式。确保其与 HTTP 端点指定的预期请求格式相符。
  • 检查请求是否包含所需的标头。如果缺少标头,您可能需要在消息属性中添加这些标头。例如,您可能需要添加 Content-Type,但可能还需要添加其他标头。
  • 确认为订阅配置的 HTTP 端点有效。
  • 在推送订阅中启用死信队列 (DLQ) 。这会将无法传送的个别消息重定向。如果您看到少量想要检查的 400 错误,启用 DLQ 会很有帮助。

401 未经授权 / 403 禁止访问

如果 Pub/Sub 因凭据不正确或无效而无法处理请求,则会发生以下错误。

401 unauthorized / 403 forbidden

发生此错误的原因是推送订阅未经过身份验证。

如需解决此问题,请尝试以下解决方案:

  • 启用推送身份验证。如果您要与 Cloud Run 或 App Engine 集成,请务必使用推送身份验证。

    如果推送身份验证不适用于您的解决方案,您可能需要在发布消息属性中添加自己的授权密钥或 API 密钥。

415 Unsupported Media Type

如果 Pub/Sub 因载荷格式不受支持而无法处理请求,则会发生以下错误。

415 Unsupported Media Type

此错误有多种原因。以下是一些最 常见的错误原因:

  • 端点缺少必需的媒体类型标头。

如需解决此问题,请尝试以下解决方案:

  • 您的端点可能需要 Content-Type 标头。默认情况下,载荷解封装不会设置媒体类型标头。您可以通过将 Content-Type 标头作为 发布消息属性附加来设置该标头。

431 请求标头字段过大 / 413 内容过大

如果 Pub/Sub 因请求中发送的内容过大而无法处理请求,则会发生以下错误。

431 request header fields too Large / 413 content too large

如果 Pub/Sub 消息中的属性超出服务器 的标头大小限制,则会发生此错误。

如需解决这些问题,请尝试以下解决方案:

  • 关闭写入元数据
  • 启用 死信队列 (DLQ) 在推送订阅中。这会将无法传送的个别消息重定向。之后,您的订阅会继续运行,但出现错误的消息 会被重定向到单独的主题以供进一步分析。

检查是否启用了载荷解封装

  1. 在 Google Cloud 控制台中,进入订阅页面。

    打开 Pub/Sub 订阅

  2. 点击您的服务的名称。

    服务详细信息页面会打开。

  3. 在配置表中,找到以下值:消息数据解封装写入消息元数据

    载荷封装的状态(已启用或已停用)会显示在相应的表格行中。

后续步骤

  • 如果您仍然遇到载荷解封装问题,请参阅获取支持