简单队列服务器httpsqs介绍

研究了一下httpsqs。

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

它专门提供队列管理服务,通过http请求,把消息存入队列,请求中需包含队列名称,因此它其实可以管理多个队列。然后在客户端(可以使用守护进程或定时任务两种形式,按需而定)使用请求把队列中的消息取出再做操作。

安装过程:

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 ../

API也相当简单,请看 http://zyan.cc/httpsqs/ 这里。

  (1)、入队列(将文本消息放入队列):

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=put&data=经过URL编码的文本消息auth=mypass123"

  HTTP POST 协议(以curl命令为例):

curl -d "经过URL编码的文本消息" "http://host:port/?name=your_queue_name&opt=put&auth=mypass123"

  如果入队列成功,返回:HTTPSQS_PUT_OK

  如果入队列失败,返回:HTTPSQS_PUT_ERROR

  如果队列已满,返回:HTTPSQS_PUT_END

  从HTTPSQS 1.2版本开始,在返回给客户端的HTTP Header头中增加了一行“Pos: xxx”,输出当前队列的读取位置点,例如:

HTTP/1.1 200 OK

Content-Type: text/plain

Keep-Alive: 120

Pos: 19

Date: Thu, 18 Mar 2010 04:57:08 GMT

Content-Length: 14


HTTPSQS_PUT_OK


  (2)、出队列(从队列中取出文本消息):

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?charset=utf-8&name=your_queue_name&opt=get&auth=mypass123"

curl "http://host:port/?charset=gb2312&name=your_queue_name&opt=get&auth=mypass123"

  返回消息队列的内容给客户端。

  如果没有未取出的消息队列,则返回:HTTPSQS_GET_END

  从HTTPSQS 1.2版本开始,在返回给客户端的HTTP Header头中增加了一行“Pos: xxx”,输出当前队列的读取位置点,例如:

HTTP/1.1 200 OK

Content-Type: text/plain; charset=utf-8

Keep-Alive: 120

Pos: 7

Date: Thu, 18 Mar 2010 04:56:01 GMT

Content-Length: 18

消息队列内容

  参数charset说明(例如:/?charset=utf-8):

  指定HTTP输出Header头的字符编码,即:

  Content-Type: text/plain; charset=utf-8 

  任何在IANA注册的字符编码均可使用,但是,并不是所有的浏览器都能解析全部的字符编码。对于中文,常用的字符编码有:utf-8、gb2312、gbk、gb18030、big5等。


  (3)、查看队列状态(普通方式,便于浏览器查看):

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=status&auth=mypass123"

  返回(示例):

HTTP Simple Queue Service v1.7

------------------------------

Queue Name: xoyo

Maximum number of queues: 1000000

Put position of queue (1st lap): 45

Get position of queue (1st lap): 6

Number of unread queue: 39

  如果“队列写入点值”大于“最大队列数量值”,将重置“队列写入点”为1,即又从1开始存储新的队列内容,覆盖原来队列位置点的内容:

HTTP Simple Queue Service v1.7

------------------------------

Queue Name: xoyo

Maximum number of queues: 1000000

Put position of queue (2st lap): 4562

Get position of queue (1st lap): 900045

Number of unread queue: 104517


  (4)、查看队列状态(JSON方式,便于程序处理返回内容):

  从HTTPSQS 1.3版本开始支持此功能。

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=status_json&auth=mypass123"

  返回(示例):{"name":"xoyo","maxqueue":1000000,"putpos":45,"putlap":1,"getpos":6,"getlap":1,"unread":39}

  如果“队列写入点值”大于“最大队列数量值”,将重置“队列写入点”为1,即又从1开始存储新的队列内容,覆盖原来队列位置点的内容:

{"name":"xoyo","maxqueue":1000000,"putpos":4562,"putlap":2,"getpos":900045,"getlap":1,"unread":104517}


  (5)、查看指定队列位置点的内容:

  跟一般的队列系统不同的是,HTTPSQS 可以查看指定队列ID(队列点)的内容,包括未出、已出的队列内容。可以方便地观测进入队列的内容是否正确。

  另外,假设有一个发送手机短信的队列,由客户端守护进程从队列中取出信息,并调用“短信网关接口”发送短信。但是,如果某段时间“短信网关接口”有故障,而这段时间队列位置点300~900的信息已经出队列,但是发送短信失败,我们还可以在位置点300~900被覆盖前,查看到这些位置点的内容,作相应的处理。

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?charset=utf-8&name=your_queue_name&opt=view&pos=5&auth=mypass123"

curl "http://host:port/?charset=gb2312&name=your_queue_name&opt=view&pos=19&auth=mypass123"

  pos >=1 并且 <= 1000000000

  返回指定队列位置点的内容。

  (6)、重置指定队列:

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=reset&auth=mypass123"

  如果重置成功,返回:HTTPSQS_RESET_OK

  如果重置失败,返回:HTTPSQS_RESET_ERROR


  (7)、更改指定队列的最大队列数量:

  默认的最大队列长度(100万条):1000000

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=maxqueue&num=1000000000&auth=mypass123"

  num >=10 并且 <= 1000000000

  如果更改最大队列数量成功,则返回:HTTPSQS_MAXQUEUE_OK

  更改的最大队列数量必须大于当前的“队列写入点”。另外,当“队列写入点”小于“队列读取点”时(即PUT位于圆环的第二圈,而GET位于圆环的第一圈时),本操作将被取消,然后返回给客户端以下信息:

HTTPSQS_MAXQUEUE_CANCEL

  (8)、不停止服务的情况下,修改定时刷新内存缓冲区内容到磁盘的间隔时间:

  从HTTPSQS 1.3版本开始支持此功能。

  默认间隔时间:5秒 或 httpsqs -s <second> 参数设置的值。

  HTTP GET 协议(以curl命令为例):

curl "http://host:port/?name=your_queue_name&opt=synctime&num=10&auth=mypass123"

  num >=1 and <= 1000000000

  如果修改间隔时间成功,则返回:HTTPSQS_SYNCTIME_OK

  如果 num 不在 1 ~ 1000000000 之间,本操作将被取消,然后返回给客户端以下信息:

HTTPSQS_SYNCTIME_CANCEL


  (9)、密码校验失败:

  从HTTPSQS 1.5版本开始支持此功能。

  如果密码校验失败(/?auth=xxx),将返回以下信息:HTTPSQS_AUTH_FAILED

  (10)、全局错误:

  如果发生全局错误(即指令、参数错误等),将返回以下信息:HTTPSQS_ERROR



---------------------------------------------------------

也就说它其实不需要安装web服务器!  我看了简介是Http请求来使用,还安装了Nginx,以为要用服务器转发请求。=--

安装Nginx服务器 可以配置一个源,比如 http://mirrors.163.com/   的貌似不错;也可以自己下载编译,一般Nginx需要pcre库,openssl库,还有zlib库的支持,要先安装好;还有一个简单方法,http://lnmp.org/install.html 

CentOS系统下执行:wget -c http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz && tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./centos.sh

Debian系统下执行:wget -c http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz && tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./debian.sh

Ubuntu系统下执行:wget -c http://soft.vpser.net/lnmp/lnmp1.1-full.tar.gz && tar zxf lnmp1.1-full.tar.gz && cd lnmp1.1-full && ./ubuntu.sh

一个命令 自动下载,解压,安装 ,挺不错



转载于:https://my.oschina.net/u/1982767/blog/291529

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值