给大家介绍一个好用的高性能HTTP长连接队列实现,支持自定义和动态改变优先级 及 自定义存储格式.
- 解决了memcached不具备的数据存储持久性问题
- 提供了memcached不具备的crash-safe、acid特性、复查查询的支持、丰富的管理和展示工具
- 解决了平时单独使用memcached时,cache和数据库数据一致性的问题,提供更高的性能
- 减少数据冗余,充分利用好内存,降低硬件投入成本
- 在提供高效的k/v访问的同时,还提供复查的查询功能,比如排序、join等等
队列服务环境:
建议环境:
任何支持JVM的操作系统,建议Linux 2.6 kernel及以上版本
JDK5及以上版本,建议JDK 5.0 update 9及JDK 6.0以上版本
Googlecode: http://code.google.com/p/sqsdb/
源代码SVN : http://sqsdb.googlecode.com/svn/trunk/
队列服务简介:
基于 HTTP GET/POST 协议的轻量级简单消息队列服务,使用的 B+Tree Key/Value 数据库, 来做数据的持久化存储。网络通信采用JAVA的NIO方式.
可以在任何文件系统上使用
可以支持各种编程语言之间相互通信
数据支持HA的集群机制
支持数据的归档和数据恢复: 标准备份, 热备份, 正常恢复, 热恢复
可以支持各种操作系统
高并发,支持上万的并发连接
支持多队列和队列文件共享
低内存消耗,海量数据存储,支持TB级数据存储。
SQSDB比JMS,HTTPSQS 效率高,功能更强大,支持各类自定义队列,且数据持久化处理,适用性和稳定性都较高。已在各类短信,彩信业务中使用。
队列功能介绍:
1. 采用B+树,可支持指定位置的入库. 如可实现各种优先级
2. 支持按索引的队列提前,推迟和删除. 如可支持任意条件的提前和推迟
客户端使用:
单机使用:
HttpClientSupport client = newHttpClientSupport();
HttpRequestMessage request = newHttpRequestMessage(“/put”, “test”, TCPObject.class,”pk=1000&content=content”);
不等待返回:client.sendMessage(request,false,null,”127.0.0.1:8080”)
等待返回:client.sendMessage(request,true,null,”127.0.0.1:8080”)
多机使用(均衡方式):
RoundRobin rr = new RoundRobin();//哈希取模方式,在服务器故障,自动分配到正常的服务器
HttpClientSupport client = newHttpClientSupport(rr);/使用配置文件client.server.ips
HttpRequestMessage request = newHttpRequestMessage(“/put”, “test”, TCPObject.class,”pk=1000&content=content”);
client.sendMessage(request,false,1)
例子说明:
以短信为例子: 短信ID,发送人,接收人,短信内容:
http://ip:prot/put?name=test&pk=1000&sk1=13511111111&sk2=13611111111&content=message
短信入队: new HttpRequestMessage(“/put”, “test”,null,”pk=1000&sk1=13511111111&sk2=13611111111&content=message”)
http://ip:prot/put?name=test&class=com.sinovatech.sqsdb.common.TCPObject&pk=1000&sk1=13511111111&sk2=13611111111&content=message
短信入队: new HttpRequestMessage(“/put”, “test”, TCPObject.class,”pk=1000&sk1=13511111111&sk2=13611111111&content=message”)
http://ip:prot/poll?name=test
短信出队: new HttpRequestMessage(“/poll”, “test”,null,null)
http://ip:prot/remove?name=test&pk=9999
按短信ID删除短信: new HttpRequestMessage(“/remove”, “test”,null,”pk=1000”)
http://ip:prot/remove?name=test&sk2=13611111111
按接收人删除短信: new HttpRequestMessage(“/remove”, “test”,null,”sk2=13611111111”)
http://ip:prot/setHead?name=test&pk=1000
按短信ID移到队头: new HttpRequestMessage(“/setHead”, “test”,null,”pk=1000”)
http://ip:prot/setHead?name=test&sk2=13611111111
按接收人移动队头: new HttpRequestMessage(“/setHead”, “test”,null,”sk2=13611111111”)
http://ip:prot/setPosition?name=test&sk2=13611111111&var=60000
按接收人设置队列位置: new HttpRequestMessage(“/setPosition”, “test”,null,”sk2=13611111111&var=60000”)
http://ip:prot/getCount?name=test
队列长度: new HttpRequestMessage(“/getCount”, “test”,null,null)
http://ip:prot/getCount?name=test&key=pk
队列长度: new HttpRequestMessage(“/getCount”, “test”,null,”key=pk”)
http://ip:prot/getCount?name=test&key=sk2
接收人个数: new HttpRequestMessage(“/getCount”, “test”,null,”key=sk2”)
http://ip:prot/getPosition?name=test&pk=9999
按短信ID查询队列位置: new HttpRequestMessage(“/getPosition”, “test”,null,”pk=9999”)
http://ip:prot/get?name=test&pk=9999
按短信ID查询短信: new HttpRequestMessage(“/get”, “test”,null,”pk=9999”)
http://ip:prot/stop
停止队列服务: new HttpRequestMessage(“/stop”, null,null,null)
附件为服务端程序代码,可用浏览器进行测试,性能测试要使用客户端。