高性能JAVA队列服务(SQSDB)

给大家介绍一个好用的高性能HTTP长连接队列实现,支持自定义和动态改变优先级 及 自定义存储格式.



NoSQL最近很火,因为它在K/V存储的优异性能表现,催生出很多产品,如:Memcached、MongoDB、Redis等等. 然而他们或多或少都有自己的某些缺陷,比如存在单点、数据安全持久化等等。然而这些随着新的技术和思路的在MySQL上面产品化,这些东西会被慢慢取代。在这之前有人说过Memcached会被NOSQLDB+NIOsocket取代,现在情况有所变化,为了兼容现有大量的Memcache客户端,可用SQSDB替换掉:


  • 解决了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)

 

 


附件为服务端程序代码,可用浏览器进行测试,性能测试要使用客户端。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值