xxljob客户端架构流程
1月13日 霸鲸观投稿 一、xxljob的调度流程和配置
任务调度器和执行器使用http协议通信,各自有轮询线程处理不同业务。
二、XXLJOB客户端启动流程加载Bean:从spring容器获取所有对象,并遍历查找方法上标记XxlJob注解的方法将xxljob配置的jobname作为key,对象Handle作为value注册Map中ConcurrentMapjobHandlerRepository的Map中维护;创建执行任务的线程池;启动内嵌的Netty服务;启动注册线程,每隔30s上报一次注册信息。
publicclassEmbedServer{publicvoidstart(finalStringaddress,finalintport,finalStringappname,finalStringaccessToken){executorBiznewExecutorBizImpl();threadnewThread(newRunnable(){Overridepublicvoidrun(){paramEventLoopGroupbossGroupnewNioEventLoopGroup();EventLoopGroupworkerGroupnewNioEventLoopGroup();ThreadPoolExecutorbizThreadPoolnewThreadPoolExecutor(0,200,60L,TimeUnit。SECONDS,newLinkedBlockingQueueRunnable(2000));startserverServerBootstrapbootstrapnewServerBootstrap();bootstrap。group(bossGroup,workerGroup)。channel(NioServerSocketChannel。class)。childHandler(newChannelInitializerSocketChannel(){OverridepublicvoidinitChannel(SocketChannelchannel)throwsException{channel。pipeline()。addLast(newIdleStateHandler(0,0,303,TimeUnit。SECONDS))beat3N,closeifidle。addLast(newHttpServerCodec())。addLast(newHttpObjectAggregator(510241024))mergerequestreponsetoFULL。addLast(newEmbedHttpServerHandler(executorBiz,accessToken,bizThreadPool));}})。childOption(ChannelOption。SOKEEPALIVE,true);ChannelFuturefuturebootstrap。bind(port)。sync();startregistrystartRegistry(appname,address);waitutilstopfuture。channel()。closeFuture()。sync();}});thread。setDaemon(true);daemon,servicejvm,userthreadleavedaemonleavejvmleavethread。start();}}三、任务的下发与执行
任务的下发与执行(服务端发送给客户端):
收到服务器不动执行进行任务分发:
privateObjectprocess(HttpMethodhttpMethod,Stringuri,StringrequestData,StringaccessTokenReq){switch(uri){casebeat:returnexecutorBiz。beat();caseidleBeat:IdleBeatParamidleBeatParamGsonTool。fromJson(requestData,IdleBeatParam。class);returnexecutorBiz。idleBeat(idleBeatParam);caserun:TriggerParamtriggerParamGsonTool。fromJson(requestData,TriggerParam。class);returnexecutorBiz。run(triggerParam);casekill:KillParamkillParamGsonTool。fromJson(requestData,KillParam。class);returnexecutorBiz。kill(killParam);caselog:LogParamlogParamGsonTool。fromJson(requestData,LogParam。class);returnexecutorBiz。log(logParam);default:returnnewReturnTString(ReturnT。FAILCODE,invalidrequest,urimapping(uri)notfound。);}}1beat:心跳保活检测
直接returnsuccess,用户服务器探活;2idleBeat:任务执行策略配置为忙碌转移时使用;
等待队列如果存在待执行任务时,返回
等待队列为空时:返回3run:接收到执行任务指令
将任务提交到执行队列中,并返回
队列满或handler不存在时返回4kill:中断任务
对执行任务的线程执行JobThread。interrupt();
每个任务Id会有一个线程,Kill仅杀死执行该任务Id的线程,下次再下发任务发现线程已中断会重新创建线程。5log:获取执行log
返回客户端执行的本地log给服务端。四、客户端注册和执行结果上报
客户端注册和执行结果上报(客户端发送给服务端)
OverridepublicReturnTStringcallback(ListHandleCallbackParamcallbackParamList){returnXxlJobRemotingUtil。postBody(addressUrlapicallback,accessToken,timeout,callbackParamList,String。class);}OverridepublicReturnTStringregistry(RegistryParamregistryParam){returnXxlJobRemotingUtil。postBody(addressUrlapiregistry,accessToken,timeout,registryParam,String。class);}OverridepublicReturnTStringregistryRemove(RegistryParamregistryParam){returnXxlJobRemotingUtil。postBody(addressUrlapiregistryRemove,accessToken,timeout,registryParam,String。class);}1registry:注册客户端信息
启动线程定时注册自己的服务到调度器;
创建线程,30s轮询一次,上报注册信息。2registryRemove:移出执行器请求
将自己从执行器列表移除;
程序退出时会调用一次,在Netty的finally代码块自动执行。3callback:异步回调结果
执行器异步回调给调度器执行任务结果;
每次任务完成时上报。五、附录1网络通信格式:
(1)客户端注册
http:127。0。0。1:8080xxljobadminapiregistry{registryGroup:EXECUTORregistryKey:xxljobexecutorsampleregistryValue:http:172。30。0。67:9999}Response:{code:200msg:nullcontent:null}
(2)客户端移除注册
http:127。0。0。1:8080xxljobadminapiregistryRemove{registryGroup:EXECUTORregistryKey:xxljobexecutorsampleregistryValue:http:xxljobaxzo。cn}Response:{code:200msg:nullcontent:null}
(3)客户端执行任务结果上报
http:127。0。0。1:8080xxljobadminapicallback{logId:1238logDateTim:1667197980007handleCode:200}Response:{code:200msg:nullcontent:null}
(4)执行器下发任务:同步回调仅代表任务是否发送成功
http:172。30。0。67:9999run{jobId:4executorHandler:demoJobHandlerexecutorParams:executorBlockStrategy:SERIALEXECUTIONexecutorTimeout:0logId:1238logDateTime:1667197980007glueType:BEANglueSource:glueUpdatetime:1666683613000broadcastIndex:0broadcastTotal:1}Response:{code:200msg:nullcontent:null}2Token配置详解
1。配置了token后,client发送的每隔http请求头会带上XXLJOBACCESSTOKEN:{xxl。job。accessToken};
2。该参数不会对请求参数加密;
3。如果配置不匹配,客户端请求报错:
{code:500msg:Theaccesstokeniswrong。content:null}
4。发送配置token的请求,Header中新增了Token参数
5。配置错token的返回
程序员的核心竞争力其实还是技术,因此对技术还是要不断的学习,关注IT巅峰技术公众号,该公众号内容定位:中高级开发、架构师、中层管理人员等中高端岗位服务的,除了技术交流外还有很多架构思想和实战案例。
作者是《消息中间件RocketMQ技术内幕》一书作者,同时也是RocketMQ上海社区联合创始人,曾就职于拼多多、德邦等公司,现任上市快递公司架构负责人,主要负责开发框架的搭建、中间件相关技术的二次开发和运维管理、混合云及基础服务平台的建设。
投诉 评论 央行银保监会加强住房租赁信贷产品和服务模式创新【央行、银保监会:加强住房租赁信贷产品和服务模式创新】财联社2月24日电,人民银行、银保监会起草了《关于金融支持住房租赁市场发展的意见(征求意见稿)》,现向社会公开征求意见。《……
注重建站内容质量利于后期优化效果很多人会抱怨,新网站将不会被列入问题,努力建设网站的维护和运营,但最终没有回报。事实上,问题就在于它本身。你真的知道如何建立一个网站吗?有些人看到了一些教程,下载了一些代码来修……
男人湿气重,怎么排湿?4种方法排湿气之前应该先健脾,因为脾主化湿,如果自己的脾虚,再怎么去湿也很困难。关于脾虚的表现,我之前有科普过,大家如果觉得自己的脾虚应该先健脾。首先,我们来说男人湿气重会有什么……
命运和运气是可以改变的你的日子过得很艰难吗?是不是事事不如意?还在整天抱怨吗?其实这一切都是可以改变的。现在非常多人都在抱怨着日子怎样不好过,钱赚得有多艰难,工作不顺心,爱情也不如意,生活得非……
林允好适合穿小成熟的服装,有种独特的美,美的很张扬穿好看的服装的时候,需选择那些能够让自己的气质变得更加清爽的,更有特色的,会比穿设计得非常普通的服装要有魅力。有些小性感的,更成熟的服装款式更容易呈现出格外迷人的魅力,对……
如何说服公司高管支持物联网项目思科曾声称:到2020年,将有500亿台设备连接到互联网,未来10年间,全球物联网产值将达到8万亿美元。同时Gartner分析师也表示,到2020年,超过一半的主要新业务流程和……
氢气造句用氢气造句大全31因为阴极极化作用超过一定范围,会导致氢气的大量析出,从而使镀层变得多孔、粗糙、疏松、烧焦,甚至是粉末状的,质量反而下降。32结合上其他从水中产生氢气的催化剂如铂,这个……
优秀的设计师都遵循这七大设计原则你想成为一位优秀的设计师吗?那这七大设计原则你要重视起来。2018年,有个设计师叫做Jimmy,他在Shmuckle公司做设计。他日夜所追求的就是有朝一日成为知名设计师,……
xxljob客户端架构流程一、xxljob的调度流程和配置任务调度器和执行器使用http协议通信,各自有轮询线程处理不同业务。二、XXLJOB客户端启动流程加载Bean:从spring容器获……
128GB256GB512GB,手机内存买多大的最合适?随着科技发展,手机已经成为了我们生活中不可或缺的一部分了,它的作用不再仅仅局限于接打电话、发短信等基础功能,而是成为了可以帮助我们点外卖、付款、玩游戏、追剧的生活小帮手。……
苏宁公子张康阳社媒账号露富惹麻烦,建行到意大利追债作者深水财经社李肖前不久,意大利超级杯决赛,国际米兰30大胜AC米兰,拿到2023年首座冠军,也是成功卫冕,夺冠颁奖仪式上,俱乐部主席张康阳笑容满面,跟国米全队一起捧起冠……
制作史莱姆一天我看到了一个神奇又好玩的东西,叫什么史莱姆Q弹,我就想做它。制作需要这些材料,牙膏水得力胶水,洗衣粉,家里没有胶水,只能买了,没有得力胶水,只有普通胶水。开始做……
电视台造句用电视台造句大全二百十一、据马来西亚《东方日报》报道,马华反对国营电视台将华语新闻时间减半,声称这是变相剥削华语听众的知情权的做法。二百十二、由郑元畅、恬妞、王安琪等联袂主演的电视剧《第……
短命疾病最易摧残类男人健康紧张快速的生活给男人们带来了很多压力,也引来了疾病威胁,男人还敢轻易说健壮吗?以下疾病最易摧残5类男人!白领男:密闭工作环境成男性健康新隐患某杂志社工作的程先生工作……
父爱是我成长的桥梁那天儿仿佛被人泼了墨一般,浓郁又压抑,密密的云层大片大片地集中在一块儿,分明又凌乱。雨终是下了。我坐在窗前,书桌上的水已经凉透了,却也懒得管它。一滴漂雨顺着窗檐从上……
波切蒂诺真敢要!大巴黎好无奈新帅加尔杰笑了姆巴佩生气啦欧洲五大联赛之一的法甲真的是越来越没看头啦,就如同德甲一样的无聊,因为新赛季还没有开始的情况下,就算你不是球迷也知道新赛季的德甲联赛冠军是拜仁,法甲的联赛冠军是土豪之队巴黎圣日……
花有重开之日,人却无再年少之时1有一千块钱就过一千块钱的日子。有一百块钱就过一百的日子,不要去和别人比生活,追求不同,各有各的活法,日子就是图的安稳和踏实。2当今社会没有人会直接给你荣华富贵,只有送你……
教师专业成长须祛除环境依赖观察基层学校发现,一些从业几十年的老教师,不但担不起资深教师之名,与优秀教师更是不沾边;一些年轻教师,过了初登讲台的新鲜劲儿后,激情不再,发展乏力。对此,这些教师并没有从自己身……
全球GDP前20强城市中国7座,美国6座,日本2座,英法韩俄前言GDP:是英文GrossDomesticProduct的简称,一般指国内生产总值,是经济核算和经济发发展的重要指标。2021年全球城市GDP前20强的名单如下:……
安全座椅选购标准差一点都要命当车速达到50kmh时,一个体重40kg的儿童就相当于1吨的运动物体,在高速撞击中所产生的冲力相当于一个大象的重量。此时要抱住孩子,相当于用手去救一个从四层楼堕落的成人,选购安……
或可造句用或可造句大全三十一、此点或可提供实施半总统制的弯在进行修宪之时的借镜。三十二、即使信用证禁止转运,只要提单上证实有关货物已由集装箱、拖车或子母船运输,银行仍可接受注明将要发生或可能发……
中国女排连败!不是赖亚文不是蔡斌,女排对战巴西,郎平终于等到中国女排连败!不是赖亚文不是蔡斌,中国女排对战巴西,郎平终于等到中国女排第三阶段保加利亚索菲亚战斗将要开始,中国女排又迎来新的对手巴西队,那么这场比赛又将是如何呢?……
唐伯虎祭恩师唐伯虎恩师卒,众学生各具猪羊前往吊唁,而唐伯虎穷困潦倒,空手而至,遭众人讥诮!正巧有一蚊来咬,唐伯虎借花献佛,以之祭先生,并作一文,文曰:同年诸君,具猪备羊,以祭恩师,自……
项产检可预测胎儿健康妈妈怀孕后,宝宝会以一个很快的速度成长。小家伙已经开始不甘寂寞了,此时的他有微妙变化,妈妈开始担心宝宝的健康问题了想知道宝宝健康情况吗?超声波产前诊断这是一种最常用……