首页 Web 关于微信公众号应用级access token的问题总结

关于微信公众号应用级access token的问题总结

前两周公司做活动用户量猛增带来的并发问题,导致access token频繁的出现问题,给关注的用户无法推送消息。以前用户量没有达到这个规模就忽略这个问题。现在到了非解决不可得地步~干.........

说说背景

我们公司的平台提供的saas版的服务,也就是说我们将需要管理多个公众号。

access token 有效期2小时,如果旧token没有过期就被刷新了那么,前一个access token 就失效了(过渡期只有五分钟)

微信官网给出的解决方案:

通过中控服务器统一获取和刷新access_token。好比年纪开会,你们班派个人来参加就行了,不要一堆人来拥挤。这也可以有效防止access token 被多次刷新的问题


根据官网的给出的方案,我们讨论了一下这个方案实施起来最简单、直接。但是如果用中控服务器来控制的话,假如我们有一千多公众号那么就需要多台服务、分段式去刷新access token 才能满足正常的业务的运转。这样高成本的费用是现阶段公司不能接受的,只能还是用回原来的方式。由用户端去刷新只不过要确保同一时间只有一个access token (保证并发情况下的控制),防止刚刷新token无效。在实际操作采用redis 作为存在的对象。如何确保只有一个用户去刷新token?我们这里采用了内存锁与redis的形式,如果redis上存在token就不再去刷新,内存锁保证同一时间内,只有一个去刷新token的动作。但是这里就踩到了一个亢~~。在高并发的情况下发现token被刷新了多次,导致一直是无效的。大家也讨论很久,确定逻辑上是没有什么漏洞。只能是代码上的问题导致,查找了很久终于定位到问题所在。由于我们系统是多线程运行的,在多线程中内存不共享导致锁不住!!!!

最终采用文件锁的形式终于解决了这个问题。。。。。。

最后无论采用哪种方案,主要切合公司成本且不存在太多的技术风险那必然是首选项。


特别声明:本站部分内容收集于互联网是出于更直观传递信息的目的。该内容版权归原作者所有,并不代表本站赞同其观点和对其真实性负责。如该内容涉及任何第三方合法权利,请及时与824310991@qq.com联系,我们会及时反馈并处理完毕。