最近遇到在开发中遇到一个场景,后台管理员批量审核用户时候,需要给用户发送审核通过信息,有人可能会想到用foreach循环发送,一般的短信接口都有调用频率,循环发送,肯定会导致部分信息发送失败,有人说用sleep()睡一会儿,这样也不行,如果遇到用户多的情况肯定会导致php执行超时,楼主参考网上方案,有2种解决方案,第一种是用队列,比较常用的有rabbitMQ,这一个跨多语言的消息队列实现,功能很强大,具体可以百度,由于这个场景算小,不打算用rabbitMQ,还有一种方案,就是用Linux任务计划,crond,
1,在linux中crond是由crontab管理的,在终端中输入crontab -e 可以新建一个任务,任务的格式是: * * * * * [执行的脚本]
2, 各个*号代表 分 时 日 月 周 ,比如我需要没半个小时执行一个操作: */30 * * * * curl http://域名/控制器/操作,还可以指定范围内 : 0,30 7-22 * * * curl http://域名/控制器/操作表示每天的7点到10中间每半个小时执行一次操作
3,首先将每次的审核用户id存入一个queue表中,表中有用户对应的电话号码,
4,然后写一个发送操作,每次取出5条,
5,然后开启一个定时计划,来执行这个操作,新建完任务后,service crond restart 重启计划,然后service crond status可以看到正处在运行的任务,
注意:新建过程都是用vi命令操作,新建完后wq一定要保存
时间: 2024-10-29 09:35:32