凌晨 1 点的 Bug,我似乎被微信坑了一把
  • 2023-07-08 16:34:27
  • 1484 热度
  • 0 评论

晚上十二点了,都躺床上准备睡觉了,有小伙伴发来了消息:

看起来好像是無名的微信公众号后台服务挂了,同时我微信上也收到了报警信息:

这感觉和公司项目上线出 BUG 一模一样,赶紧爬起来看看是啥情况。

这里要先和大家解释下微信公众号后台是怎么一回事。

大家平时看到的文章,直接在微信公众号后台编辑发布即可,不需要任何额外的开发;公众号后台的关键字自动回复功能,微信也有提供,可以在公众号后台一个一个的配置回复的关键字及其对应的信息,也可以自己开发一个后台。

無名因为之前整了 2TB 的免费学习资料(公号后台回复 2TB),涉及到的关键字非常多,在公众号后台一个一个配置太麻烦了,我就自己开发了一个后台,专门用来处理微信公众号后台的关键字回复,并且还写了两篇技术帖:

如果是自己开发后台,消息的传递流程是这样:

  1. 首先关键字 vhr 这个字符从公众号上发送到了微信服务器
  2. 接下来微信服务器会把 vhr 转发到我自己的服务器上
  3. 我收到 vhr 这个字符之后,就去数据库中查询,将查询的结果,按照腾讯要求的 XML 格式进行返回
  4. 微信服务器把从我的服务器收到的信息,再发回到微信上,于是小伙伴们就看到了返回结果了

大致的流程就是这个样子。

所以当小伙伴发来消息后,那我想肯定是这里的某一个环节出问题了。应该不是代码问题,代码从去年 9 月上线到现在差不多稳定运行 1 年了,所以代码出问题概率很小。

家里的网络有点慢,使用起来不太方便,而且时间比较晚了,我想着赶紧把问题解决了早点睡觉,于是第一个想到了重启大法,结果重启之后还是不行。

没办法,只能一个一个排查。

  1. 首先看看数据库是否完好,因为很久之前买过一个国外的服务器,被人入侵数据库勒索比特币,所以这次第一个先检查数据库有没有问题,只要数据库没问题,就不是大事(其实数据库有问题也没关系,被入侵过之后,我已经养成了日常备份的好习惯)。
  2. 数据库没问题,那就再看看 Spring Boot 的运行日志,也未发现问题;
  3. 由于我的服务器上部署了多个服务,用了 Nginx 做反向代理,所以接着又去看了 Nginx 的访问日志,总算发现一点端倪。当我在手机上给微信公众号后台发送关键字的时候,Nginx 的访问日志中看不到相关记录,说明微信的服务器没有把关键字转发到我的服务器上面来。
  4. 猜测可能是微信服务器和我自己的服务器之间的通信受阻,会不会是我的服务调不通呢?我又用 postman 测试了自己的接口,发现没问题。

这就把人难住了。接口是通的,但是就是查不到数据。一边冥思苦想一边用手机回复关键字测试,忽然发现我的另外一个微信号回复关键字可以正常响应,我又去看了 Nginx 访问日志,也可以看到相关记录,这迷之响应让我感觉我的服务其实没问题,可能是微信的问题。

有的微信可以正常回复关键字,有的不可以,我需要更多的案例来证明我的猜想。大晚上的哪里找这么多微信去呢?

忽然想到了微信公众号后台的消息功能,这个地方可以显示出所有小伙伴发送来的消息以及我的服务器给出的响应。赶紧打开看了一下,大晚上还有不少小伙伴在回复关键字查询资源,可以看到,有的小伙伴回复关键字会有正常响应:

而有的小伙伴回复关键字则没有响应:

有的小伙伴可能会问是不是我的服务不稳定呢?基本上可以排除这一可能,有两个原因:

  1. 我一个手机上装了两个微信,这边刚发送完关键字那边就发送,但是一个有响应而另一个没响应。
  2. 假如服务不稳定,Nginx 上也应该收到请求,但实际上 Nginx 日志中并未显示收到微信发来的请求。

这个时候从一个小伙伴处得知,他在当天下午给一个公众号回复关键字的时候也出现了类似问题:

虽然没有证据表明这两个就一定有关系,但是我还是倾向于相信是微信出问题了。

看着小伙伴们在后台回复消息却没有响应,我也很焦急,但是却没有办法,已经快两点了,睡觉吧,睡一觉就好了,谁知道呢。

整个过程最让我惊奇的是小伙伴们太刻苦了,凌晨一点服务器上 Nginx 的访问日志一直在刷新,看到还有人在访问我的博客网站。

第二天早上醒来的时候,服务还是没有恢复,到了早上十点左右的时候,我什么都没做,服务自动恢复了,至少我自己这边几个微信号都可以正常回复关键字了。

这一波折腾,让我本就不充裕的睡眠雪上加霜。不知道小伙伴们周二有没有遇到这个问题?下次小伙伴们在后台回复关键字的时候如果遇到这个问题,直接公众号下方菜单加我微信反映即可,無名会及时想办法或者将你需要的资源私发给大家。


alay

Flame

Hello world!

0 评论
留下评论