午夜咖啡午夜咖啡

jolestar 的文章与笔记。

Post

JDK 1.7 之后的 APNS 收不到问题

2013-04-22 15:20:06Post

当推送服务在升级 JDK 后出现“发送正常但客户端收不到”的问题时,真正要优先怀疑的往往不是业务逻辑,而是 SSL 协议栈这类底层依赖变化。

那次把 JDK 升到 1.7 之后,遇到一个很烦的问题:Apple Push 发送端看起来是正常的,但客户端就是收不到消息。

这类问题最麻烦的地方在于,表面现象非常像“业务逻辑有 bug”,但一路排查下来,系统和网络都没有明显异常,发送接口本身也没有直接报错。

最后我开始怀疑是不是 JDK 本身带来的变化,降级之后果然恢复正常。

当时使用的是 javapns 客户端,所以我初步的判断是:新版本 JDKSSL 协议栈或相关实现做了调整,导致原有客户端库在兼容性上踩了坑。

这种排障过程对我最大的提醒是:一旦出现“发送成功但结果异常”的问题,不能只盯着业务层看。运行时升级、协议栈变化、第三方客户端库的兼容性,很多时候才是真正的根因入口。

后来我也把问题提给了 javapns 项目。像这种问题,本质上往往是三层耦合在一起:平台协议、运行时实现、客户端库封装。只看最上层现象,很容易误判。