需求是要通过服务器发送微信模板消息
目前使用的方案:
1、发送任务是先进redis队列里
2、然后crontab每分钟去执行出队列的发送任务
3、但是是每分钟去执行的,如何能无延迟去处理任务
============================分隔线==============================
补充:
首先感谢回复的亲们!
还有几个疑问想要咨询的
1、如果用脚本do.php,守护进程去处理,并通过定时任务脚本去监控这个进程,这样运行对服务器会产生多大的压力?还是可以忽略不计
2、如果采用其他的异步消息处理队列方法(主要需求是高频发送微信模板消息):
如用swool开启WebSocket,直接把任务发送至WebSocket去处理
这样的方法和采用 redis 守护进程去执行出队列的方法相比,会有哪些优点和不足的?
============================分隔线==============================
补充2:
又遇到几个问题
问题一:
在终端使用如下nohup命令,创建不了进程
nohup php /www/wwwroot/127.0.0.1/do.php &
后台切换终端目录至网站根目录下,再次运行nohup命令,创建进程成功了
cd /www/wwwroot/127.0.0.1
nohup php do.php &
不知道造成这个问题的原因是什么?
难道是do.php里面有include包含其他文件的关系吗?
问题二:
do.php脚本创建进程后,通过如下ps命令可以看到,重启服务器后,这个进程就没有了。
看了下shell语法,do.sh文件如下
#!/bin/bash
ps -fe | grep do.php | grep -v grep
if [ $? -eq 0 ]
then
echo "runing"
else
echo "not runing"
fi
但是一直提示如下错误
do.sh:行8: 未预期的符号 `fi' 附近有语法错误
do.sh:行8: `fi'
do.sh的语句应该没有问题啊
要做到无延迟处理,就只能起一个常驻内存的 php 服务,可以写成 php 脚本,然后
nohup
启动,阻塞监听 redis 消息代码参考
疑问解答:
优点: 少了一环,架构变简单,消息链路短,反馈效果好
缺点: socket 所在服务要承担更高的压力
补充2:
nohup
如果不指定日志文件,会有一个叫nohup.out
的日志文件在执行目录,看一下报错信息dos2unix
改为 Linux 换行符:dos2unix do.sh
。遇到这种诡异的问题,如果确认语法没问题,可以尝试在新文件重写一次(不要复制)