Home >Backend Development >PHP Tutorial >消息队列 - 如何实现php的异步任务队列

消息队列 - 如何实现php的异步任务队列

WBOY
WBOYOriginal
2016-06-06 20:50:331626browse

在开发一个类微博系统,采用推模式,用户发一条微博,需要将此微博在其所有粉丝每人的“收件箱“中存一条,如果粉丝数量大,处理过程就会很耗时,想把这个逻辑用异步队列来实现。

思路如下:
1)用户每发一条微博,就生成一个异步任务,PUSH到队列中去
2)由另外一个进程或线程顺序执行队列里的任务

问题是:
实现消息队列可以采用MemcachedQ,starling等等,将任务以某种格式放到消息队列中去没什么问题
但如何开启另外的进程或线程去取队列中的任务然后去执行呢?
写一个php循环去取队列中的任务?没有任务就直接循环着查询?有没有更好的解决方案?

回复内容:

在开发一个类微博系统,采用推模式,用户发一条微博,需要将此微博在其所有粉丝每人的“收件箱“中存一条,如果粉丝数量大,处理过程就会很耗时,想把这个逻辑用异步队列来实现。

思路如下:
1)用户每发一条微博,就生成一个异步任务,PUSH到队列中去
2)由另外一个进程或线程顺序执行队列里的任务

问题是:
实现消息队列可以采用MemcachedQ,starling等等,将任务以某种格式放到消息队列中去没什么问题
但如何开启另外的进程或线程去取队列中的任务然后去执行呢?
写一个php循环去取队列中的任务?没有任务就直接循环着查询?有没有更好的解决方案?

可以考虑redis的subscribe
http://redis.io/topics/pubsub

这个是推id的吧。

见过一个是依赖nginx的fastcgi_finish_request。
调用后。php继续执行。

可以参考这个 php-resque
https://github.com/chrisboulton/php-resque
任务队列

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn