KitDelay

KitDelay 是使用KitDB为底层研发的一款延迟队列。KitDelay可以单节点使用,也可建立多节点强一致性的集群

开始

GET IT

GitHub

参数说明

JVM参数

参数说明示例
服务端口号对外服务的端口号-Dserver.port=9000

程序参数

参数说明示例
参数1raft存储目录/data/raft
参数2本机节点配置 ip+port192.168.0.2:8081
参数3集群配置 多个 ip+port192.168.0.3:8081,192.168.0.4:8081,192.168.0.2:8081
参数4KitDB存储目录/data/kitdb
参数5启动模式def:多节点 standalone:独立

启动

  1. java -jar -Dserver.port=#服务端口号# KitDelay.jar #参数1# #参数2# #参数3# #参数4# #参数5#

多节点

多节点模式应至少保证3个节点

  1. java -jar -Dserver.port=9000 KitDelay.jar /data/raft 192.168.0.3:8081 192.168.0.3:8081,192.168.0.4:8081,192.168.0.2:8081 /data/kitdb def

单节点

单节点模式下,前三个参数用任意字符代替

  1. java -jar -Dserver.port=9000 KitDelay.jar x x x /data/kitdb standalone

API

格式

请求

请求采用 HTTP请求

GET

  1. GET /pop?limit=100&group=test&key=test

POST

  1. POST /add?key=test
  2. Content-Type: application/json
  3. {
  4. "id": "f20eb733-a7b5-4a52-8bc8-202859609f65",
  5. "data": "{\"task\":\"do some\",\"num\":10081}",
  6. "millisecond": 6000,
  7. "group":"test"
  8. }

返回

  1. {
  2. "errno": 0,
  3. "errmsg": null,
  4. "data": ""
  5. }
参数说明
errno错误码 0:正确 非0:错误
errmsg错误信息
data返回数据

重定向

写操作和部分节点管理操作只能在Leader节点执行,当操作节点不是Leader节点时,会如下返回,这是需要客户端重定向请求

  1. {
  2. "errno": 699, // 需要重定向的状态码
  3. "errmsg": "not leader,need redirect",
  4. "data": "192.168.0.3" //重定向地址
  5. }

认证

请求时在URL加上参数 key=test

如需修改,可在Jar包中的\BOOT-INF\classes\application.properties 中修改

数据接口

添加消息

  1. POST /add?key=test
  2. Content-Type: application/json
  3. {
  4. "id": "f20eb733-a7b5-4a52-8bc8-202859609f65",
  5. "data": "{\"task\":\"do some\",\"num\":10081}",
  6. "millisecond": 6000,
  7. "group":"test"
  8. }
参数说明
id消息的ID
data消息的数据
millisecond消息的延迟时间(毫秒)
group分组

如果ID已存在,将会修改已有的消息延迟时间和数据

获取到期的任务

  1. GET /pop?limit=100&group=test&key=test
  1. {
  2. "errno": 0,
  3. "errmsg": null,
  4. "data": [{
  5. "group": "test",
  6. "id": "f20eb733-a7b5-4a52-8bc8-202859609f65",
  7. "data": "{\"task\":\"do some\",\"num\":10081}",
  8. "millisecond": 1574915598686
  9. },
  10. {
  11. "group": "test",
  12. "id": "d1899359-8068-4597-b224-17d93f67f4b5",
  13. "data": "{\"task\":\"do some 2\",\"num\":102081}",
  14. "millisecond": 1574915625772
  15. }
  16. ]
  17. }
参数说明
limit每次请求最多返回数
group分组

批量添加消息

  1. POST /adds?key=test
  2. Content-Type: application/json
  3. [
  4. {
  5. "id": "f20eb733-a7b5-4a52-8bc8-202859609f65",
  6. "data": "{\"task\":\"do some\",\"num\":10081}",
  7. "millisecond": 6000,
  8. "group":"test"
  9. }
  10. ]

查询到期的任务

只查询,消息不会被删除

  1. GET /pop?limit=100&group=test&key=test

查询某个任务的到期时间

  1. GET /queryTime?id=1f20eb733-a7b5-4a52&group=test&key=test

集群管理接口

查询Leader节点IP

  1. GET /leader?key=test HTTP/1.1

查询所有节点

  1. GET /getNodes?key=test HTTP/1.1

添加节点

  1. GET /addNode?key=test&node=192.168.0.10:8081 HTTP/1.1

移除节点

  1. GET /removeNode?key=test&node=192.168.0.10:8081 HTTP/1.1