首页 > 技术文章 > 基于HTTP协议的轻量级开源简单队列服务:HTTPSQS

fairyin 2015-05-29 11:16 原文

基于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/httpsqs-data -a abv

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);  

推荐阅读