美文网首页
HTTPSQS 轻量级简单队列服务

HTTPSQS 轻量级简单队列服务

作者: Fairyin | 来源:发表于2016-05-10 17:16 被阅读730次

    基于HTTP协议的轻量级开源简单队列服务:HTTPSQS(引用地址:http://zyan.cc/httpsqs/

    1. HTTPSQS 具有以下特征:
    • 非常简单,基于 HTTP GET/POST 协议。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP协议的编程语言均可调用。
    • 非常快速,入队列、出队列速度超过10000次/秒。
    • 高并发,支持上万的并发连接,C10K不成问题。
    • 支持多队列。
    • 单个队列支持的最大队列数量高达10亿条。
    • 低内存消耗,海量数据存储,存储几十GB的数据只需不到100MB的物理内存缓冲区。
    • 可以在不停止服务的情况下便捷地修改单个队列的最大队列数量。
    • 可以实时查看队列状态(入队列位置、出队列位置、未读队列数量、最大队列数量)。
    • 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。
    • 查看队列内容时,支持多字符集编码。
    • 源代码不超过800行,适合二次开发。
    2.1 HTTPSQS 编译安装(软件包下载地址 https://code.google.com/p/httpsqs/downloads/list)
    cd /var/www/com.bigood
    
    sudo mkdir httpsqs
    
    sudo chown -R www-data:www-data httpsqs/
    
    cd httpsqs/
    
    sudo wget https://httpsqs.googlecode.com/files/httpsqs-1.7.tar.gz
    
    sudo wget https://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz
    
    sudo wget https://httpsqs.googlecode.com/files/tokyocabinet-1.4.47.tar.gz
    
    sudo wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz 
    
    
    2.2 安装 libevent-2.0.12-stable
    sudo tar zxvf libevent-2.0.12-stable.tar.gz 
    
    cd libevent-2.0.12-stable/
    
    sudo ./configure --prefix=/usr/local/libevent-2.0.12-stable/
     
    sudo make 
    
    sudo make install 
    
    
    2.3 安装 tokyocabinet-1.4.47 (此步骤必须在安装tokyotyrant 之前。)
    sudo tar zxvf tokyocabinet-1.4.47.tar.gz
    
    cd tokyocabinet-1.4.47/
    
    sudo ./configure --prefix=/usr/local/tokyocabinet-1.4.47/
    
    tips: error1.  configure: error: zlib.h is required
    
    sudo apt-get install zlib1g-dev
    
    tips: error2. configure: error: bzlib.h is required
    
    sudo aptitude install libbz2-dev 
    
    sudo make 
    
    sudo make install 
    
    
    2.4 安装 tokyotyrant-1.1.41
    sudo tar zxvf tokyotyrant-1.1.41.tar.gz 
    
    cd tokyotyrant-1.1.41/ 
    
    sudo ./configure --prefix=/usr/local/tokyotyrant-1.1.41/ --with-tc=/usr/local/tokyocabinet-1.4.47/ --enable-lua 
    
    tips: configure: error: lua.h is required
    
    sudo tar zxvf lua-5.3.0.tar.gz 
    
    cd lua-5.3.0/ 
    
    sudo make linux
    
    tips: lua.c:80:31: fatal error: readline/readline.h: No such file or directory
    
    sudo apt-get install libreadline6 libreadline6-dev
    
    
    
    
    sudo wget http://www.lua.org/ftp/lua-5.3.0.tar.gz
    
    sudo make
    
    sudo make install 
    
    2.5 安装 httpsqs 1.7 (httpsqs -h 查看是否安装成功)
    sudo tar zxvf httpsqs-1.7.tar.gz
    
    cd httpsqs-1.7/
    
    sudo make 
    
    sudo make install 
    
    
    2.6 安装 php 扩展。
    sudo tar zxvf php_httpsqs_client_0.2.1.tar.gz 
    
    sudo mkdir php_httpsqs_client
    
    sudo mv php_httpsqs_client_0.2.1.tar.gz php_httpsqs_client
    
    cd php_httpsqs_client/
    
    sudo tar zxvf php_httpsqs_client_0.2.1.tar.gz 
    
    sudo apt-get install php5-dev
    
    sudo ./configure --enable-httpsqs --with-php-config=/usr/bin/php-config5
    
    sudo make 
    
    sudo make install
    
    cd /etc/php5/mods-available/
    
    sudo vi httpsqs.ini
    
    extension=httpsqs.so;
    
     cd /etc/php5/conf.d/
     
     sudo ln -s ../mods-available/httpsqs.ini 30-httpsqs.ini
     
     sudo service php5-fpm restart 
    
    
    2.7 使用(创建一个队列,查看监听端口的情况,停止服务)
    httpsqs -l 127.0.0.1 -d -p 1218 -x /var/www/com.bigood/httpsqs-data -a ceca846c3dbca3fc
    
    sudo netstat   -anp  | grep 1218
    
    sudo killall httpsqs
    
    2.8 php 客户端说明文档 (httpsqs_client.php 文件下载地址:https://code.google.com/p/httpsqs/source/browse/trunk/client/php/httpsqs_client.php)
    <?php  
        include_once("httpsqs_client.php");   
        $httpsqs = new httpsqs($httpsqs_host, $httpsqs_port, $httpsqs_auth, $httpsqs_charset);   
       
        /*  
        1. 将文本信息放入一个队列(注意:如果要放入队列的PHP变量是一个数组,需要事先使用序列化、json_encode等函数转换成文本) 
           如果入队列成功,返回布尔值:true  
           如果入队列失败,返回布尔值:false  
        */   
        $result = $httpsqs->put($queue_name, $queue_data);   
       
        /*  
        2. 从一个队列中取出文本信息 
           返回该队列的内容 
           如果没有未被取出的队列,则返回文本信息:HTTPSQS_GET_END 
           如果发生错误,返回布尔值:false  
        */   
        $result = $httpsqs->get($queue_name);   
          
        /*  
        3. 从一个队列中取出文本信息和当前队列读取点Pos 
           返回数组示例:array("pos" => 7, "data" => "text message") 
           如果没有未被取出的队列,则返回数组:array("pos" => 0, "data" => "HTTPSQS_GET_END") 
           如果发生错误,返回布尔值:false 
        */   
        $result = $httpsqs->gets($queue_name);  
          
        /*  
        4. 查看队列状态(普通方式) 
        */   
        $result = $httpsqs->status($queue_name);  
          
        /*  
        5. 查看队列状态(JSON方式) 
           返回示例:{"name":"queue_name","maxqueue":5000000,"putpos":130,"putlap":1,"getpos":120,"getlap":1,"unread":10} 
        */   
        $result = $httpsqs->status_json($queue_name);  
           
        /*  
        6. 查看指定队列位置点的内容 
           返回指定队列位置点的内容。 
        */   
        $result = $httpsqs->view($queue_name, $queue_pos);  
           
        /*  
        7. 重置指定队列 
           如果重置队列成功,返回布尔值:true  
           如果重置队列失败,返回布尔值:false  
        */   
        $result = $httpsqs->reset($queue_name);  
           
        /*  
        8. 更改指定队列的最大队列数量 
           如果更改成功,返回布尔值:true 
           如果更改操作被取消,返回布尔值:false 
        */   
        $result = $httpsqs->maxqueue($queue_name, $num);  
          
        /* 
        9. 修改定时刷新内存缓冲区内容到磁盘的间隔时间 
           如果更改成功,返回布尔值:true 
           如果更改操作被取消,返回布尔值:false 
        */  
        $result = $httpsqs->synctime($num);  
    
    

    相关文章

      网友评论

          本文标题:HTTPSQS 轻量级简单队列服务

          本文链接:https://www.haomeiwen.com/subject/wryyrttx.html