DROP TABLE IF EXISTS mykit_delay_queue_job_log
;
CREATE TABLE mykit_delay_queue_job_log
(
id
varchar(128) NOT NULL,
status
int(11) DEFAULT NULL,
thread
varchar(60) DEFAULT NULL,
update_time
datetime(3) DEFAULT NULL,
host
varchar(128) DEFAULT NULL,
KEY mykit_delay_queue_job_LOG_ID_STATUS
(id
,status
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
关于高可用
分布式协调还是选用zookeeper。
如果有多个实例最多同时只能有1个实例工作 这样就避免了分布式竞争锁带来的坏处,当然如果业务需要多个实例同时工作也是支持的,也就是一个消息最多只能有1个实例处理,可以选用zookeeper或者redis就能实现分布式锁了。
最终做了一下测试多实例同时运行,可能因为会涉及到锁的问题性能有所下降,反而单机效果很好。所以比较推荐基于docker的主备部署模式。
-
支持 master,slave (HA)需要配置
mykit.delay.registry.serverList
zk集群地址列表 -
支持 cluster 会涉及到分布式锁竞争 效果不是很明显 分布式锁采用
redis
的setNx
实现 -
StandAlone
目前,经过测试,推荐使用master slave的模式,并且,在升级版本中,进一步增强了Master Slave模式。后期会优化Cluster模式。
为了提供一个统一的精准定时任务和延时队列框架,mykit-delay提供了HTTP Rest接口和RPC方式供其他业务系统调用,接口使用简单方便,只需要简单的调用接口,传递相应的参数即可。
RPC方式调用,后续支持的方式有:
-
Dubbo(已实现)
-
brpc(预留支持)
-
grpc(预留支持)
-
Motan(预留支持)
-
Sofa(预留支持)
-
SpringCloud(预留支持)
-
SpringCloud Alibaba(预留支持)
消息体
以JSON数据格式参数 目前提供了http
协议。
-
body 业务消息体
-
delay 延时毫秒 距
createTime
的间隔毫秒数 -
id 任务ID 系统自动生成 任务创建成功返回
-
status 状态 默认不填写
-
topic 标题
-
subtopic 保留字段
-
ttl 保留字段
-
createTime 创建任务时间 非必填 系统默认
启动HTTP Rest服务
首先,从GitHub Clone项目到本地
git clone https://github.com/sunshinelyz/mykit-delay.git
然后进入mykit-delay框架目录。
cd mykit-delay
执行Maven命令
mvn clean package -Dmaven.test.skip=true
接下来,进入 mykit-delay-core
的 target
目录下,运行如下命令。
java -jar mykit-delay-core-xxx.jar
其中,xxx是版本号,以实际下载的版本号为准。
接下来,就可以调用HTTP Restful接口来使用mykit-delay框架了。
添加任务
/push
POST application/json
{“body”:“{hello world}”,“delay”:10000,“id”:“20”,“status”:0,“topic”:“ces”,“subtopic”:“”,ttl":12}
删除任务
删除任务 需要记录一个JobId
/delete?jobId=xxx
GET
恢复单个任务
用于任务错乱 脑裂情况 根据日志恢复任务
/reStoreJob?JobId=xxx
GET
恢复所有未完成的任务
根据日志恢复任务
/reStore?expire=true
GET
参数expire
表示是否需要恢复已过期还未执行的数据
清空队列数据
根据日志中未完成的数据清空队列中全部数据。清空之后 会删除缓存中的所有任务
/clearAll
GET
消息体
以JSON数据格式参数 目前提供了http
协议。
-
body 业务消息体
-
delay 延时毫秒 距
createTime
的间隔毫秒数 -
id 任务ID 系统自动生成 任务创建成功返回
-
status 状态 默认不填写
-
topic 标题
-
subtopic 保留字段
-
ttl 保留字段
-
createTime 创建任务时间 非必填 系统默认
启动Dubbo服务
首先,从GitHub Clone项目到本地
git clone https://github.com/sunshinelyz/mykit-delay.git
然后进入mykit-delay框架目录。
cd mykit-delay
执行Maven命令
mvn clean package -Dmaven.test.skip=true
接下来,进入 mykit-rpc-dubbo
模块下的 mykit-rpc-dubbo-server
服务 的 target
目录下,运行如下命令。
mykit-rpc-dubbo-server-xxx.jar
其中,xxx是版本号,以实际下载的版本号为准。
引入mykit-delay依赖
以Dubbo方式接入mykit-delay,需要引入mykit-delay的依赖,如下所示。
io.mykit.delay
mykit-rpc-dubbo-common
1.0-SNAPSHOT
然后,在需要调用Dubbo服务的类中以如下方式注入MykitDelayDubboInterface。
@DubboReference(version = “1.0.0”)
private MykitDelayDubboInterface mykitDelayDubboInterface;
其中,MykitDelayDubboInterface接口的定义如下所示。
/**
-
@author binghe
-
@version 1.0.0
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
面试结束复盘查漏补缺
每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。
以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~
重要的事说三遍,关注+关注+关注!
更多笔记分享
包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-R5QQxNqF-1710764549540)]
面试结束复盘查漏补缺
每次面试都是检验自己知识与技术实力的一次机会,面试结束后建议大家及时总结复盘,查漏补缺,然后有针对性地进行学习,既能提高下一场面试的成功概率,还能增加自己的技术知识栈储备,可谓是一举两得。
以下最新总结的阿里P6资深Java必考题范围和答案,包含最全MySQL、Redis、Java并发编程等等面试题和答案,用于参考~
重要的事说三遍,关注+关注+关注!
[外链图片转存中…(img-8u135he4-1710764549541)]
[外链图片转存中…(img-uCZYYZN4-1710764549541)]
更多笔记分享
[外链图片转存中…(img-MSuWNywI-1710764549542)]