范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

xxljob客户端架构流程

  一、xxl-job的调度流程和配置
  任务调度器和执行器使用http协议通信,各自有轮询线程处理不同业务。
  二、XXL-JOB客户端启动流程加载Bean: 从spring容器获取所有对象,并遍历查找方法上标记XxlJob注解的方法 将xxljob配置的jobname作为key,对象Handle作为value注册Map 中 ConcurrentMap jobHandlerRepository的Map中维护; 创建执行任务的线程池; 启动内嵌的Netty服务; 启动注册线程,每隔30s上报一次注册信息。
  public class EmbedServer {      public void start(final String address, final int port, final String appname, final String accessToken) {         executorBiz = new ExecutorBizImpl();         thread = new Thread(new Runnable() {             @Override             public void run() {                 // param                 EventLoopGroup bossGroup = new NioEventLoopGroup();                 EventLoopGroup workerGroup = new NioEventLoopGroup();                 ThreadPoolExecutor bizThreadPool = new ThreadPoolExecutor(                         0,                         200,                         60L,                         TimeUnit.SECONDS,                         new LinkedBlockingQueue(2000));                  // start server                 ServerBootstrap bootstrap = new ServerBootstrap();                 bootstrap.group(bossGroup, workerGroup)                         .channel(NioServerSocketChannel.class)                         .childHandler(new ChannelInitializer() {                             @Override                             public void initChannel(SocketChannel channel) throws Exception {                                 channel.pipeline()                                         .addLast(new IdleStateHandler(0, 0, 30 * 3, TimeUnit.SECONDS))  // beat 3N, close if idle                                         .addLast(new HttpServerCodec())                                         .addLast(new HttpObjectAggregator(5 * 1024 * 1024))  // merge request & reponse to FULL                                         .addLast(new EmbedHttpServerHandler(executorBiz, accessToken, bizThreadPool));                              }                         }).childOption(ChannelOption.SO_KEEPALIVE, true);                  ChannelFuture future = bootstrap.bind(port).sync();                  // start registry                 startRegistry(appname, address);                  // wait util stop                 future.channel().closeFuture().sync();             }         });         thread.setDaemon(true);    // daemon, service jvm, user thread leave >>> daemon leave >>> jvm leave         thread.start();     } }三、任务的下发与执行
  任务的下发与执行(服务端发送给客户端):
  收到服务器不动执行进行任务分发:
  private Object process(HttpMethod httpMethod, String uri, String requestData, String accessTokenReq) {        switch (uri) {           case "/beat":               return executorBiz.beat();           case "/idleBeat":               IdleBeatParam idleBeatParam = GsonTool.fromJson(requestData, IdleBeatParam.class);               return executorBiz.idleBeat(idleBeatParam);           case "/run":               TriggerParam triggerParam = GsonTool.fromJson(requestData, TriggerParam.class);               return executorBiz.run(triggerParam);           case "/kill":               KillParam killParam = GsonTool.fromJson(requestData, KillParam.class);               return executorBiz.kill(killParam);           case "/log":               LogParam logParam = GsonTool.fromJson(requestData, LogParam.class);               return executorBiz.log(logParam);           default:               return new ReturnT(ReturnT.FAIL_CODE, "invalid request, uri-mapping(" + uri + ") not found.");         } }1 /beat:心跳保活检测
  直接return success,用户服务器探活; 2 /idleBeat:任务执行策略配置为忙碌转移时使用;
  等待队列如果存在待执行任务时,返回false;
  等待队列为空时:返回true; 3 /run:接收到执行任务指令
  将任务提交到执行队列中,并返回true;
  队列满或handler不存在时返回false; 4 /kill:中断任务
  对执行任务的线程执行 JobThread.interrupt();
  每个任务Id会有一个线程,Kill仅杀死执行该任务Id的线程,下次再下发任务发现线程已中断会重新创建线程。 5 /log:获取执行log
  返回客户端执行的本地log给服务端。 四、客户端注册和执行结果上报
  客户端注册和执行结果上报(客户端发送给服务端)
  @Override public ReturnT callback(List callbackParamList) {     return XxlJobRemotingUtil.postBody(addressUrl+"api/callback", accessToken, timeout, callbackParamList, String.class); }  @Override public ReturnT registry(RegistryParam registryParam) {     return XxlJobRemotingUtil.postBody(addressUrl + "api/registry", accessToken, timeout, registryParam, String.class); }  @Override public ReturnT registryRemove(RegistryParam registryParam) {     return XxlJobRemotingUtil.postBody(addressUrl + "api/registryRemove", accessToken, timeout, registryParam, String.class); }1 /registry:注册客户端信息
  启动线程定时注册自己的服务到调度器;
  创建线程,30s轮询一次,上报注册信息。 2 /registryRemove:移出执行器请求
  将自己从执行器列表移除;
  程序退出时会调用一次,在Netty的finally代码块自动执行。 3 /callback:异步回调结果
  执行器异步回调给调度器执行任务结果;
  每次任务完成时上报。 五、附录1 网络通信格式:
  (1)客户端注册
  http://127.0.0.1:8080/xxl-job-admin/api/registry {     "registryGroup": "EXECUTOR"     "registryKey": "xxl-job-executor-sample"     "registryValue": "http://172.30.0.67:9999/" }  Response: {     "code": 200     "msg": null     "content": null }
  (2)客户端移除注册
  http://127.0.0.1:8080/xxl-job-admin/api/registryRemove {     "registryGroup": "EXECUTOR"     "registryKey": "xxl-job-executor-sample"     "registryValue": "http://xxljob-axzo.cn" }  Response: {     "code": 200     "msg": null     "content": null }
  (3)客户端执行任务结果上报
  http://127.0.0.1:8080/xxl-job-admin/api/callback {     "logId": 1238     "logDateTim": 1667197980007     "handleCode": 200 }  Response: {     "code": 200     "msg": null     "content": null }
  (4)执行器下发任务:同步回调仅代表任务是否发送成功
  http://172.30.0.67:9999/run {     "jobId": 4     "executorHandler": "demoJobHandler"     "executorParams": ""     "executorBlockStrategy": "SERIAL_EXECUTION"     "executorTimeout": 0     "logId": 1238     "logDateTime": 1667197980007     "glueType": "BEAN"     "glueSource": ""     "glueUpdatetime": 1666683613000     "broadcastIndex": 0     "broadcastTotal": 1 }  Response: {     "code": 200     "msg": null     "content": null }2 Token配置详解
  1.配置了token后,client发送的每隔http请求头会带上XXL-JOB-ACCESS-TOKEN :{xxl.job.accessToken} ;
  2.该参数不会对请求参数加密;
  3.如果配置不匹配,客户端请求报错:
  { "code": 500 "msg": "The access token is wrong." "content": null }
  4.发送配置token的请求,Header中新增了Token参数
  5.配置错token的返回
  程序员的核心竞争力其实还是技术,因此对技术还是要不断的学习, 关注 "IT巅峰技术" 公众号  ,该公众号内容定位:中高级开发、架构师、中层管理人员等中高端岗位服务的,除了技术交流外还有很多架构思想和实战案例。
  作者是 《 消息中间件 RocketMQ 技术内幕》 一书作者,同时也是 "RocketMQ 上海社区"联合创始人,曾就职于拼多多、德邦等公司,现任上市快递公司架构负责人,主要负责开发框架的搭建、中间件相关技术的二次开发和运维管理、混合云及基础服务平台的建设。

读书运动早睡,是性价比最高的投资作者洞见muye一点点改变,好过一成不变。一个人前半生的投资,决定着后半生的生活状态。好的人生,都离不开对自己长远的投资。巴菲特说,最好的投资,是投资你自己。投资股市有赚有赔,投资读书运动早睡,是性价比最高的投资作者洞见muye一点点改变,好过一成不变。一个人前半生的投资,决定着后半生的生活状态。好的人生,都离不开对自己长远的投资。巴菲特说,最好的投资,是投资你自己。投资股市有赚有赔,投资MotoX30Pro将有大惊喜,前辈机皇优势全无含泪以白菜价离场根据之前的官方预热,motoX30Pro还将搭载新一代骁龙8移动平台和高达2亿像素的后置镜头。前者已安装在小米12S系列红魔鬼7S系列iQOO10系列等机型上。得益于TSMC的4nMotoX30Pro将有大惊喜,前辈机皇优势全无含泪以白菜价离场根据之前的官方预热,motoX30Pro还将搭载新一代骁龙8移动平台和高达2亿像素的后置镜头。前者已安装在小米12S系列红魔鬼7S系列iQOO10系列等机型上。得益于TSMC的4niQOO9Pro和iQOO10的价格差不多,选哪一款比较好?其实相比iQOO9Pro,iQOO10除了屏幕有比较明显的劣势外,其他基本没什么毛病!1处理器相比iQOO9Pro上的骁龙8,iQOO10上台积电工艺的骁龙8在功耗上有30左右的降iQOO9Pro和iQOO10的价格差不多,选哪一款比较好?其实相比iQOO9Pro,iQOO10除了屏幕有比较明显的劣势外,其他基本没什么毛病!1处理器相比iQOO9Pro上的骁龙8,iQOO10上台积电工艺的骁龙8在功耗上有30左右的降同样有徕卡,小米12spro对比华为p50pro,怎么选?我知道这样对比对华为不公平,但是之前有几个网友说小米想冲高端,先得问问华为,其实这样是不怎么公平的,因为现在华为被重重制裁,如果单论参数对比的话,肯定是对比不过,当然了,现在买华为同样有徕卡,小米12spro对比华为p50pro,怎么选?我知道这样对比对华为不公平,但是之前有几个网友说小米想冲高端,先得问问华为,其实这样是不怎么公平的,因为现在华为被重重制裁,如果单论参数对比的话,肯定是对比不过,当然了,现在买华为四两之躯也要迸发千斤之力iPadAir(第五代)蜂窝版深度体验本文作者为体验师丨喵總,首发于糖纸众测。写在前面更快更高更强更团结,相信你一定非常熟悉这经典的奥林匹克格言!当Apple发布桌面级自研芯片M1,并开始在MaciPad产品线同时搭载四两之躯也要迸发千斤之力iPadAir(第五代)蜂窝版深度体验本文作者为体验师丨喵總,首发于糖纸众测。写在前面更快更高更强更团结,相信你一定非常熟悉这经典的奥林匹克格言!当Apple发布桌面级自研芯片M1,并开始在MaciPad产品线同时搭载红米K60系列曝光搭载2K屏骁龙8等红米K50的热度还没有下去呢,K60又要来了。最近,红米的一款新机RedmiK60曝光,据爆料人称,该系列机型将采用天玑骁龙双平台战略,两款芯片组均基于台积电4nm工艺,这意味着它
iPhone15侧面图曝光,不支持全天候显示功能据韩国Naver博客上的新闻聚合账号yeux1122引述的一位业内人士消息,苹果标准版iPhone15将不配备LTPO显示屏,意味着该机将不支持ProMotion自适应刷新率和全天A股复盘必读指数冲高后尾盘微跌,北向资金连续3日减仓,光刻胶概念股全天走强大盘行情上证指数收跌0。22,报3276。09点,成交额3288亿元深证成指收跌0。16,报11579。99点,成交额4278亿元创业板指收跌0。21,报2372。68点,成交额1住房租赁金融新政有利于住房租赁市场平稳健康发展赵秀池首都经济贸易大学教授北京市房地产法学会副会长兼秘书长2月24日,中国人民银行中国银保监会发布关于金融支持住房租赁市场发展的意见(征求意见稿)(以下简称意见)公开征求意见的通知远距离WiFi无线通信技术,飞睿智能CV5200模组,公里级远程传输应用WiFi无线保真是一个无线网络通信技术的品牌,由WiFi联盟所持有,目的是改善基于IEEE802。11标准的无线网路产品之间的互通性。实质上是一种商业认证,同时也是一种无线联网技术全国两会为汽车业谋定发展方向我国新能源汽车产销量已连续8年位居世界首位,为稳就业促消费作出了应有的贡献。图为今年3月在上海举办的惠民团车节,市民在询问国产新能源汽车的性能参数。视觉中国供图作为国民经济的支柱产小鹏汽车多名核心高管处于已离职或者将离职状态据多位知情人士透露,小鹏汽车多名核心高管处于已离职或者将离职状态。其中,动力总成副总裁刘明辉已经离职,接替他的是零部件公司德尔福的前技术高管顾捷,顾捷已加入小鹏汽车,出任动力部门高引导民营经济高质量发展促进共同富裕据悉,2023年全国两会期间,全国政协委员西藏众源建材集团有限公司董事长卓嘎提交了提振民营企业家发展边疆地区经济的信心的提案,希望能够引导企业为推动西藏经济高质量发展作贡献。民营经日日顺供应链与天津大学管理与经济学部达成产学合作3月8日,日日顺供应链与天津大学管理与经济学部达成产学合作,标志着双方产教融合进入了全方位深层次的新阶段。现场,天津大学党委常委统战部长人文社科处处长张俊艳,天津大学管理与经济学部论道姚景源中央经济工作会议提出六个统筹,统筹好质的提升和量的合理增长视频加载中姚景源(国务院参事室特约研究员国家统计局原总经济师)中国改革开放40年,过去更多是讲高速度增长,要讲速度讲数量,为什么呢有道理。改革开放之初1978年,我们吃饭要粮票穿衣融资渠道再拓宽,新希望地产坚守长期主义(来源视觉中国)进入2023年,稳字依然是房地产市场的核心关键词。3月5日提请审议的政府工作报告中强调,有效防范化解优质头部房企风险,改善资产负债状况,防止无序扩张,促进房地产业平刘汉元代表连线外媒中国正引领全人类能源转型3月8日,60多家境外媒体以视频连线形式集中采访四川代表团代表,对全国人大代表全国工商联副主席通威集团董事局主席刘汉元进行云访谈。今年政府工作报告提出,统筹能源安全稳定供应和绿色低