Home >php教程 >PHP源码 >PHP队列服务HTTPSQS的安装和使用实例

PHP队列服务HTTPSQS的安装和使用实例

WBOY
WBOYOriginal
2016-06-08 17:20:111170browse

HTTPSQS(HTTP Simple Queue Service)是一款基于 HTTP GET/POST 协议的轻量级开源简单消息队列服务,使用 Tokyo Cabinet 的 B+Tree Key/Value 数据库来做数据的持久化存储

<script>ec(2);</script>

HTTPSQS(HTTP Simple Queue Service)是一个基于HTTP GET/POST请求的简单队列服务。

PHP队列服务HTTPSQS的安装和使用


PHP队列服务HTTPSQS的安装和使用

队列(Queue)又称先进先出表(First In First Out),即先进入队列的元素,先从队列中取出。加入元素的一头叫“队头”,取出元素的一头叫“队尾”。利用消息队列可以很好地异步处理数据传送和存储, 当你频繁地向数据库中插入数据、频繁地向搜索引擎提交数据,就可采取消息队列来异步插入。另外,还可以将较慢的处理逻辑、有并发数量限制的处理逻辑,通过消息队列放在后台处理,例如FLV视频转换、发送手机短信、发送电子邮件等,也就是实现异步请求。

HTTPSQS 具有以下特征:

● 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
● 非常快速,入队列、出队列速度超过10000次/秒。
● 高并发,支持上万的并发连接,C10K不成问题。
● 支持多队列。
● 单个队列支持的最大队列数量高达10亿条。
● 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
● 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
● 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
● 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
● 查看队列内容时,支持多字符集编码。
● 源代码不超过800行,适合二次开发。

HTTPSQS使用示例:

//生成对账单
public function create_dzd()
{
    $sl_id = I('get.sl_id','','intval');
    $sl_uid = I('get.sl_uid','','intval');
 
    $this->send_task->startTrans();//开启事务
 
    $data['st_params'] = $sl_id;
    $data['st_seller_id'] = $sl_uid;
    $data['st_type'] = 3;
    $data['st_add_time'] = time();
    $data['st_success'] = 1;//1后台生成对账单
    $data['st_is_compelete'] = 0;
    $data['st_ip'] = get_client_ip(1);
    $id = $this->send_task->add($data);
    if($id){
        $httpsqs = $this->getHttpsqs();
        $name = self::EXPORT_RECORD;
        $rs = $httpsqs->put($name, $id);
        if($rs){
            $this->send_task->commit();
            $this->ajaxReturn(array('code'=>0, 'msg'=>'已经开始生成!'));
        }else{
            $this->send_task->rollback();
            $this->ajaxReturn(array('code'=>2, 'msg'=>'生成对账单失败'));
        }
    }else{
        $this->ajaxReturn(array('code'=>3, 'msg'=>'生成对账单失败'));
    }
}

这就是一个队列的应用,生成对账单,入队列,同时把记录写入到一张表记录。另一个java脚本读取队列,进行处理,更新记录。

HTTPSQS封装在一个类中,调用的时候这样调用:


//初始化队列服务
private function getHttpsqs()
{
    import("COM.Httpsqs");
    $httpsqs = new Httpsqs("192.168.1.8", 1218, "dafadsfasfsadfsa", 'utf-8');
    return $httpsqs;
}
但是要使用HTTPSQS,必须有一台队列服务器,这个服务器装了队列服务。

以上初始化队列,也指定了ip,端口,来连接队列服务器,才能进行队列的操作。

HTTPSQS服务器端安装方法:


ulimit -SHn 65535
 
wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
tar zxvf libevent-2.0.12-stable.tar.gz
cd libevent-2.0.12-stable/
./configure --prefix=/usr/local/libevent-2.0.12-stable/
make
make install
cd ../
 
wget http://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
tar zxvf tokyocabinet-1.4.47.tar.gz
cd tokyocabinet-1.4.47/
./configure --prefix=/usr/local/tokyocabinet-1.4.47/
#注:在32位Linux操作系统上编译Tokyo cabinet,请使用./configure --enable-off64代替./configure,可以使数据库文件突破2GB的限制。
#./configure --enable-off64 --prefix=/usr/local/tokyocabinet-1.4.47/
make
make install
cd ../
 
wget http://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
tar zxvf httpsqs-1.7.tar.gz
cd httpsqs-1.7/
make
make install
cd ../
更具体的服务器端HTTPSQS队列服务的安装和编译,参考:https://code.google.com/p/httpsqs/

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