【问题标题】:Rate Limit Exceeded error when using Google Cloud Messaging API使用 Google Cloud Messaging API 时出现 Rate Limit Exceeded 错误
【发布时间】:2015-01-03 15:05:39
【问题描述】:

使用 Google Cloud Messaging API 在后端服务器和 Android/Chrome 客户端之间发送消息时,后端服务器有时会收到超出速率限制的响应代码。对于HTTP Connection Server,此代码是“DeviceMessageRateExceeded”,对于Cloud Connection Server,此代码是“DEVICE_MESSAGE_RATE_EXCEEDED”。

这个错误码是什么,应该如何管理?

【问题讨论】:

    标签: android google-play-services google-cloud-messaging chrome-gcm


    【解决方案1】:

    速率限制异常代码表明您过于频繁地从后端服务器发送消息。为确保服务稳定,每分钟/每台设备应用程序可以从后端服务器发送的消息数量有上限。此限制设置得很高,因此大多数表现良好的应用程序不会受到影响,但所有应用程序都应准备好接收此错误代码。

    如问题中所述,在HTTP Connection Server 的情况下,错误代码将为“DeviceMessageRateExceeded”。对于Cloud Connection Server,它将是“DEVICE_MESSAGE_RATE_EXCEEDED”,它正在替换之前的错误代码“QUOTA_EXCEEDED”。

    如果您的后端服务器收到此错误代码,它必须减慢向客户端发送消息的速度,最好通过实现exponential backoff

    【讨论】:

    • 下游的ack是否计入配额?我如何知道何时能够再次发送下游消息?
    • 您无法确切知道何时能够再次发送消息,但您应该在尝试重新提交时在系统级别使用指数退避。
    • 如果我们已经做了指数退避并尊重 5xx 错误代码的 Retry-After 就足够了吗?
    • 另外,对于 HTTP DeviceMessageRateExceeded 错误返回什么错误代码号?
    【解决方案2】:

    CCS 下游确认未计入配额。

    当您向单个设备发送过多消息时,会达到 DeviceMessageRateExceeded 配额 - 您无需取消所有发送,只需发送到该注册 ID。请确保您处理“规范”注册 ID 响应 - 可能有多个 regid 指向同一设备。

    在 C2DM 中使用了“quota_exceeded” - GCM 目前不返回它。如果有人仍在使用 C2DM - 处理是限制/退避发送所有消息。甚至更好 - 迁移到没有此全局配额的 GCM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-20
      • 1970-01-01
      • 2015-11-22
      • 2016-02-14
      相关资源
      最近更新 更多