轻量级开源简单消息队列HTTPSQS使用说明

lovewarming 2014-04-30 01:51:23
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编译安装

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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 服务器使用文档
# httpsqs -h

复制代码
1
2
3
4
5
6
7
8
9
10
11
-l <ip_addr> 监听的IP地址,默认值为 0.0.0.0
-p <num> 监听的TCP端口(默认值:1218)
-x <path> 数据库目录,目录不存在会自动创建(例如:/opt/httpsqs/data)
-t <second> HTTP请求的超时时间(默认值:3)
-s <second> 同步内存缓冲区内容到磁盘的间隔秒数(默认值:5)
-c <num> 内存中缓存的最大非叶子节点数(默认值:1024)
-m <size> 数据库内存缓存大小,单位:MB(默认值:100)
-i <file> 保存进程PID到文件中(默认值:/tmp/httpsqs.pid)
-a <auth> 访问HTTPSQS的验证密码(例如:mypass123)
-d 以守护进程运行
-h 显示这个帮助
示例:

复制代码
1
2
ulimit -SHn 65535
httpsqs -d -p 1218 -x /data0/queue
请使用命令“killall httpsqs”、“pkill httpsqs”和“kill `cat /tmp/httpsqs.pid`”来停止httpsqs。
注意:请不要使用命令“pkill -9 httpsqs”和“kill -9 httpsqs的进程ID”来结束httpsqs,否则,内存中尚未保存到磁盘的数据将会丢失。
HTTPSQS PHP 客户端说明文档
A、PHP 客户端扩展(第三方提供,详情请访问:http://code.google.com/p/php-httpsqs-client/)
B、PHP 客户端 Class 文件(官方提供:适用于 HTTPSQS 1.7 以上版本,推荐使用。)
用法:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?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);
?>
...全文
1475 1 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rocloud 2014-05-10
  • 打赏
  • 举报
回复
楼主是在科普,顺便散分散分吗?要消灭零回复啊

2,163

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧