Heim  >  Artikel  >  Backend-Entwicklung  >  laravel5.1 - php 后台怎么开一个进程监听Redis的队列消息呢?用while?

laravel5.1 - php 后台怎么开一个进程监听Redis的队列消息呢?用while?

WBOY
WBOYOriginal
2016-07-06 13:53:212020Durchsuche

我知道Redis的list有pub/sub模式,但是php 后台怎么开一个进程监听Redis的队列消息呢?用while循环吗?这样是不是不太好

回复内容:

我知道Redis的list有pub/sub模式,但是php 后台怎么开一个进程监听Redis的队列消息呢?用while循环吗?这样是不是不太好

<code>while($res = Redis::blpop($key)) {
    doJob($res);
}</code>

Redis有阻塞原语读取队列,队列没有数据时,php监听进程会挂起

<code>while + sleep 没啥问题</code>

<code>$cmd = "ps aux | grep -i '".$task_name."' | grep -v grep | wc -l";
if(shell_exec($cmd) > 0){
    echo "【$task_name】进程运行中…\r\n";
    return false;
}</code>

通过pcntl_fork系列方法开启守护进程,监听请求。
redis队列有操作是发送请求到监听端口,同时处理历史失败消息队列。

谢邀。我没做过相关的实践。
刚搜了下:使用resque比较多
1)http://www.cnblogs.com/zl0372/p/3696641.html
2)http://avnpc.com/pages/run-background-task-by-php-resque
希望对你有所帮助

在服务器后台挂个进程去监控就好,supervisor,就算挂了也会自动重启

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn