Http Task Queue 异步列队服务搭建记录
最近在开发一套 CRM 系统,需要用到列队服务做推送,然后看到了有前辈已经造好了轮子 开源的任务队列服务 HTQ 直接部署一下试试
首先我的服务器用的 Centos7 并没有装 nodejs
下载源码编译一下 ps:编译时间好 tm 长
开始编译安装 nodejs
wget https://nodejs.org/dist/v10.13.0/node-v10.13.0.tar.gz
tar zxvf node-v10.13.0.tar.gz
cd node-v10.13.0
./configure
make
make install
安装完毕后测试一下
[root@Centos htq]# node -v
v10.13.0
[root@Centos htq]# npm -v
6.4.1
ok
开始安装 HTQ
执行命令:
1 |
|
安装完毕后,首先修改一下config.json
里面的 token
然后执行以下命令启动:
1 |
|
上面这种启动方式是临时运行的,关闭命令行窗口就会停止了。如果想一直在后台运行,则可:
1 |
|
如果想关闭退出,可运行:
1 |
|
下面就是在业务里面使用了,直接 HTTP 投递任务
守护进程
采用 PM2 来守护进程和开机自启
安装 PM2
1 |
|
从 PM2 启动 HTQ 服务
1 |
|
设置开机自启
1 |
|
HTQ 的使用文档
添加队列
请求 URL:
http://server:5999/api/addQueue
请求方式:
- POST
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
queue_name | 是 | string | 队列名,英文+数字,不要出现中文 |
type | 是 | string | 类型。可以是”real_time”、”timing”、”variable” ,分别对应实时队列、定时队列、可变队列。如果是可变队列,则会对执行任务的返回结果有要求。请参考添加任务接口的备注说明部分 |
app_key | 是 | string | 请填写 config.json 里的 app_key 以供认证。初次安装 HTQ 可更改默认的值以提高安全性。更改后需要重启 HTQ 以生效 |
app_token | 是 | string | 请填写 config.json 里的 app_token 以供认证。初次安装 HTQ 可更改默认的值以提高安全性。更改后需要重启 HTQ 以生效 |
stepping_time | 否 | int | 步进时间,单位是秒。当队列类型是可变队列的时候请传此参数。可变队列的执行机制请参考下文的备注部分。了解执行机制能让你更清晰地知道该如何设置此值 |
max_time_interval | 否 | int | 最大时间间隔,当队列类型是可变队列的时候请传此参数。可变队列的执行机制请参考下文的备注部分 。了解执行机制能让你更清晰地知道该如何设置此值 |
成功返回示例
1 |
|
失败返回示例
1 |
|
可变队列的执行机制
可变队列的某个任务进入队列后,其 url 会被触发访问。URL 执行的页面若返回字符串“reset”【 即直接在 url 的页面打印“reset”,如命令 print(“reset”)】,则任务的执行时间间隔会重置。若返回字符串”done”,则结束并删除当前任务.其他情况,URl 都会被延迟下一次执行。延迟的时间计算公式是:执行次数 X 步进时间(stepping_time) 。其中,延迟时间最大值为 max_time_interval。
所以,当 URl 没有被重置或者结束的时候,它会慢慢地增大下次执行时间,变得越来越慢,最后达到最大间隔时间 max_time_interval 后将一直保持这个执行时间间隔。直至得到重置命令或者结束命令.
添加任务到队列
请求 URL:
http://server:5999/api/addTask
请求方式:
- POST
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
queue_name | 是 | string | 无 |
url | 是 | string | 如 https://cuojue.org/test?test=123&ff=22 |
app_key | 是 | string | 请填写 config.json 里的 app_key 以供认证。初次安装 HTQ 可更改默认的值以提高安全性。更改后需要重启 HTQ 以生效 |
app_token | 是 | string | 请填写 config.json 里的 app_token 以供认证。初次安装 HTQ 可更改默认的值以提高安全性。更改后需要重启 HTQ 以生效 |
execute_time | 否 | string | 执行时间(可选),如”2016-08-21 10:21:12” 。当队列类型为定时队列的时候请传此参数。 |
成功返回示例
1 |
|
失败返回示例
1 |
|
备注说明
当队列是可变队列时(type =’variable’ ),URL 执行的页面若返回字符串”reset”,则任务的执行时间间隔会重置。若返回字符串”done”,则结束并删除当前任务.
获取所有队列
请求 URL:
http://server:5999/api/allQueue
请求方式:
- POST
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
app_key | 是 | string | 请填写 config.json 里的 app_key 以供认证。初次安装 HTQ 可更改默认的值以提高安全性。更改后需要重启 HTQ 以生效 |
app_token | 是 | string | 请填写 config.json 里的 app_token 以供认证 |
成功返回示例
1 |
|
获取某个队列的任务数
请求 URL:
http://server:5999/api/countQueue
请求方式:
- POST
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
queue_name | 是 | string | 无 |
app_key | 是 | string | 无 |
app_token | 是 | string | 无 |
成功返回示例
1 |
|
删除队列
请求 URL:
http://server:5999/api/deleteQueue
请求方式:
- POST
参数:
参数名 | 必选 | 类型 | 说明 |
---|---|---|---|
queue_name | 是 | string | 无 |
app_key | 是 | string | 请填写 config.json 里的 app_key 以供认证 |
app_token | 是 | string | 请填写 config.json 里的 app_token 以供认证 |
成功返回示例
1 |
|
失败返回示例
1 |
|
实现伪代码 PHP codeigniter
修改一下官方提供的 SDK 放到 librariesHtq.php
1 |
|
业务 model
1 |
|
执行器
1 |
|
参考内容:
http://blog.star7th.com/2016/09/2114.html
https://github.com/star7th/htq
https://www.showdoc.cc/htq?page_id=38897
https://www.jianshu.com/p/7d3f3fa056e8
https://blog.csdn.net/m0_37792354/article/details/80906113