使用消息队列的原因有很多,比如:

  • 耗时任务,最典型的就是发邮件和发送http请求
  • 高并发,要排队,比如写入数据库操作,比如电商里的抢购或者秒杀

消息队列,可大可小。最小的,就是写个函数,然后用cron定时执行,用mysql做介质。再大一点,就是用一些成熟的开源库,比如RabbitMQ等,分为clientserverworker。再大,就是自己写一个适合自己的队列库,搞分布式,搞集群。扯远了。。。。

我目前用消息队列,就是因为用户评论的时候,会请求Server酱,给我发通知,这是个耗时的任务,尤其是我博客服务器在美国,对方服务器在国内。

想了2天,最终决定,就用最简单的办法,用户评论的时候,在数据库写入一条记录,然后再写个小脚本,每5分钟查询一次,有没完成的,就执行一下。

其实我这人太纠结了。我这博客又他妈不是什么热门网站,一个月能有几条评论?杀鸡不能用牛刀。

就这样吧。

github

Typecho_Comment2Hook_Plugin

使用方法:

  • 请把Comment2Hook整个目录拷贝到 Typecho 安装路径的usr/plugins/
  • 登录进入 Typecho 博客后台,进行设置,否则不能使用
  • 设置的时候,必须填入 webhook 的 url,例如,Server 酱会给你一个 url,类似这样:https://sc.ftqq.com/<;"server chan key">.send
  • 目前只支持 Server 酱,其他通道会后续增加

特别感谢

//ctx.res
//Node's response object.

//Bypassing Koa's response handling is not supported. Avoid using the following node properties:

res.statusCode
res.writeHead()
res.write()
res.end()

这几天遇到一个怪事,本地测试一切OK,放到服务器就出问题了。还以为是Nodejs或者PM2有个什么缓存什么的。后来打log才发现,其实这其实就是对客户端的输入没有做处理,导致计算的md5的值总是不一致。

后来对参数进行处理,比如统统toString()trim(),然后才好。

中间还加了一个表,就是把token存在表里,再比对什么的,这简直了,越搞越复杂,因为还要用到transaction把token表和user表一起更新(让token失效,让user的验证字段为true)。

这么一个简单的问题,搞得那么复杂。