当前位置: 首页 > news >正文

做网站建设公司crm在线dedecms手机网站插件

做网站建设公司crm在线,dedecms手机网站插件,建站前端模板,asp与sql网站建设文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置… 文章目录 前言定时任务分布式任务调度 1、XXL-JOB介绍1.1 XXL-JOB概述1.2 XXL-JOB特性1.3 整体架构 2、XXL-JOB任务中心环境搭建2.1 XXL-JOB源码下载2.2 IDEA导入xxljob工程2.3 初始化数据库2.4 Docker安装任务管理中心 3、XXL-JOB任务注册测试3.1 引入xxl-job核心依赖3.2 配置xxljob相关信息3.3 定义定时任务执行方法3.4 配置任务执行器3.5 配置任务执行计划3.6 调度流程 4、CRON表达式入门4.1 cron表达式介绍4.2 cron表达式语法介绍4.3 cron表达式阅读练习 5、总结5.1 XXL-JOB 执行原理5.2 XXLO-JOB 工作流程5.3 如何保证任务不重复执行 前言 定时任务 一般在项目中实现定时任务主要是两种技术方案一种是Spring Task另一种是xxl-job其中Spring Task是适合单体项目中使用而xxl-job是分布式任务调度框架更适合在分布式项目中使用。 分布式任务调度 在微服务架构体系中服务之间通过网络交互来完成业务处理的在分布式架构下一个服务往往会部署多个实例来运行我们的业务如果在这种分布式系统环境下运行任务调度我们称之为分布式任务调度。 分布式系统的特点并且提高任务的调度处理能力 并行任务调度 并行任务调度实现靠多线程如果有大量任务需要调度此时光靠多线程就会有瓶颈了因为一台计算机CPU的处理能力是有限的。如果将任务调度程序分布式部署每个结点还可以部署为集群这样就可以让多台计算机共同去完成任务调度我们可以将任务分割为若干个分片由不同的实例并行执行来提高任务调度的处理效率。 高可用 若某一个实例宕机不影响其他实例来执行任务。 弹性扩容 当集群中增加实例就可以提高并执行任务的处理效率。 任务管理与监测 对系统中存在的所有定时任务进行统一的管理及监测。让开发人员及运维人员能够时刻了解任务执行情况从而做出快速的应急处理响应。 避免任务重复执行 当任务调度以集群方式部署同一个任务调度可能会执行多次比如在电商系统中到点发优惠券的例子就会发放多次优惠券对公司造成很多损失所以我们需要控制相同的任务在多个运行实例上只执行一次。 1、XXL-JOB介绍 1.1 XXL-JOB概述 ​ XXL-JOB是一个轻量级分布式任务调度平台其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线开箱即用。 ​ 目前已有多家公司接入xxl-job包括比较知名的大众点评京东优信二手车北京尚德360金融 (360)联想集团 (联想)易信 (网易)等; 1.2 XXL-JOB特性 官方地址http://www.xuxueli.com/xxl-job 更多详情见官网; 1.3 整体架构 xxl-job架构图官图 调度中心 负责管理调度信息按照调度配置发出调度请求自身不承担业务代码主要职责为执行器管理、任务管理、监控运维、日志管理等 任务执行器 负责接收调度请求并执行任务逻辑只要职责是注册服务、任务执行服务接收到任务后会放入线程池中的任务队列、执行结果上报、日志服务等 任务负责执行具体的业务处理。调度中心与执行器之间的工作流程如下 执行流程 任务执行器根据配置的调度中心的地址自动注册到调度中心。达到任务触发条件调度中心下发任务。执行器基于线程池执行任务并把执行结果放入内存队列中、把执行日志写入日志文件中。执行器消费内存队列中的执行结果主动上报给调度中心。当用户在调度中心查看任务日志调度中心请求任务执行器任务执行器读取任务日志文件并返回日志详情。 2、XXL-JOB任务中心环境搭建 2.1 XXL-JOB源码下载 考虑到网络原因我们选择gitee下的开源地址下载 选择最新的2.30版本下载. 2.2 IDEA导入xxljob工程 2.3 初始化数据库 数据库脚本https://gitee.com/xuxueli0323/xxl-job/blob/2.3.0/doc/db/tables_xxl_job.sql 将xxljob提供的SQL脚本导入到mysql容器服务中 整体如下 xxl_job_lock任务调度锁表xxl_job_group执行器信息表维护任务执行器信息xxl_job_info调度扩展信息表 用于保存XXL-JOB调度任务的扩展信息如任务分组、任务名、机器地址、执行器、执行入参和报警邮件等等xxl_job_log调度日志表 用于保存XXL-JOB任务调度的历史信息如调度结果、执行结果、调度入参、调度机器和执行器等等xxl_job_log_report调度日志报表用户存储XXL-JOB任务调度日志的报表调度中心报表功能页面会用到xxl_job_logglue任务GLUE日志用于保存GLUE更新历史用于支持GLUE的版本回溯功能xxl_job_registry执行器注册表维护在线的执行器和调度中心机器地址信息xxl_job_user系统用户表 注意 如果表xxl_job_registry导入过程报Specified key was too long; max key length is 767 bytes错误则将i_g_k_v联合索引相关字段的varchar改小一些即可 2.4 Docker安装任务管理中心 拉取xxl-job-admin任务中心镜像 docker pull xuxueli/xxl-job-admin:2.3.0启动xxl-job任务中心容器 # 在指定目录构建xxldata目录然后运行如下docker指令 docker run -e PARAMS--spring.datasource.urljdbc:mysql://192.168.200.128:3306/xxl_job?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneUTC --spring.datasource.usernameroot --spring.datasource.passwordroot -p 8093:8080 -v $PWD/xxldata:/data/applogs --namexxl-job-admin -d xuxueli/xxl-job-admin:2.3.0docker run -e PARAMS--spring.datasource.urljdbc:mysql://192.168.20.128:3306/xxl_job?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneUTC --spring.datasource.usernameroot --spring.datasource.password1234 -p 8093:8080 -v $PWD/xxldata:/data/applogs --namexxl-job-admin -d xuxueli/xxl-job-admin:2.3.0访问容器服务 http://192.168.200.128:8093/xxl-job-admin效果如下 登录进入后效果 注意Docker服务重启时保证对应的mysql服务启动否则任务信息无法加载 3、XXL-JOB任务注册测试 3.1 引入xxl-job核心依赖 通过官方提供的xxljob代码我们可知道在xxl-job-executor-sample-springboot工程中引入和xxljob的核心依赖 !-- xxl-job-core -- dependencygroupIdcom.xuxueli/groupIdartifactIdxxl-job-core/artifactIdversion${project.parent.version}/version /dependency将来我们的项目也可通过这种方式集成xxl-job 3.2 配置xxljob相关信息 接下来就是配置任务工程信息 配置完毕后工程底层通过XxlJobConfig配置类加载配置信息实现xxljob相关资源的初始化工作 package com.xxl.job.executor.core.config; Configuration public class XxlJobConfig {private Logger logger LoggerFactory.getLogger(XxlJobConfig.class);Value(${xxl.job.admin.addresses})private String adminAddresses;Value(${xxl.job.accessToken})private String accessToken;Value(${xxl.job.executor.appname})private String appname;Value(${xxl.job.executor.address})private String address;Value(${xxl.job.executor.ip})private String ip;Value(${xxl.job.executor.port})private int port;Value(${xxl.job.executor.logpath})private String logPath;Value(${xxl.job.executor.logretentiondays})private int logRetentionDays;Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.info( xxl-job config init.);XxlJobSpringExecutor xxlJobSpringExecutor new XxlJobSpringExecutor();xxlJobSpringExecutor.setAdminAddresses(adminAddresses);xxlJobSpringExecutor.setAppname(appname);xxlJobSpringExecutor.setAddress(address);xxlJobSpringExecutor.setIp(ip);xxlJobSpringExecutor.setPort(port);xxlJobSpringExecutor.setAccessToken(accessToken);xxlJobSpringExecutor.setLogPath(logPath);xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);return xxlJobSpringExecutor;} }3.3 定义定时任务执行方法 package com.xxl.job.executor.service.jobhandler; Component public class SampleXxlJob {private static Logger logger LoggerFactory.getLogger(SampleXxlJob.class);/*** 1、简单任务示例Bean模式*/XxlJob(demoJobHandler)public void demoJobHandler() throws Exception {//todo 打印时间System.out.println(hello xxljob.....);}//.....省略....../*** 5、生命周期任务示例任务初始化与销毁时支持自定义相关逻辑*/XxlJob(value demoJobHandler2, init init, destroy destroy)public void demoJobHandler2() throws Exception {XxlJobHelper.log(XXL-JOB, Hello World.);}public void init(){logger.info(init);}public void destroy(){logger.info(destory);} }说明 XxlJob中的value值就是定时任务的一个标识注解作用的方法就是定时任务要执行逻辑的逻辑方法 3.4 配置任务执行器 注意如果自动注册不识别可手动录入执行服务地址格式比如http://192.168.200.1:9999 3.5 配置任务执行计划 接下来我们将xxl-job-executor-sample-springboot工程下的demoJobHandler任务可视化配置并启动 接下来输入JobHanler输入的名称保证与xxljob注解下的value值一致即可 xxl-job支持的路由策略非常丰富 FIRST第一个固定选择第一个机器 LAST最后一个固定选择最后一个机器 ROUND轮询在线的机器按照顺序一次执行一个 RANDOM随机随机选择在线的机器 CONSISTENT_HASH一致性HASH每个任务按照Hash算法固定选择某一台机器且所有任务均匀散列在不同机器上。 LEAST_FREQUENTLY_USED最不经常使用使用频率最低的机器优先被选举 LEAST_RECENTLY_USED最近最久未使用最久未使用的机器优先被选举 FAILOVER故障转移按照顺序依次进行心跳检测第一个心跳检测成功的机器选定为目标执行器并发起调度 BUSYOVER忙碌转移按照顺序依次进行空闲检测第一个空闲检测成功的机器选定为目标执行器并发起调度 SHARDING_BROADCAST(分片广播)广播触发对应集群中所有机器执行一次任务同时系统自动传递分片参数可根据分片参数开发分片任务 XL-JOB并不直接提供数据处理的功能它只会给执行器分配好分片序号在向执行器任务调度的同时下发分片总数以及分片序号等参数执行器收到这些参数根据自己的业务需求去利用这些参数。 分片广播下可以配合如下参数设置合理的调度策略最简单的如取模拆分。 // 分片节点总数 int shardTotal XxlJobHelper.getShardTotal(); // 当前节点下标从0开始 int shardIndex XxlJobHelper.getShardIndex();还有一些其他参数配置的解析 子任务每个任务都拥有一个唯一的任务ID(任务ID可以从任务列表获取)当本任务执行结束并且执行成功时将会触发子任务ID所对应的任务的一次主动调度通过子任务可以实现一个任务执行完成去执行另一个任务。调度过期策略 忽略调度过期后忽略过期的任务从当前时间开始重新计算下次触发时间立即执行一次调度过期后立即执行一次并从当前时间开始重新计算下次触发时间 阻塞处理策略 调度过于密集执行器来不及处理时的处理策略 单机串行默认调度请求进入单机执行器后调度请求进入FIFO队列并以串行方式运行丢弃后续调度调度请求进入单机执行器后发现执行器存在运行的调度任务本次请求将会被丢弃并标记为失败覆盖之前调度调度请求进入单机执行器后发现执行器存在运行的调度任务将会终止运行中的调度任务并清空队列然后运行本地调度任务 任务超时时间 支持自定义任务超时时间任务运行超时将会主动中断任务失败重试次数 支持自定义任务失败重试次数当任务失败时将会按照预设的失败重试次数主动进行重试 启动任务查看执行效果 当然我们也可以随时停止正在被执行的任务 3.6 调度流程 4、CRON表达式入门 4.1 cron表达式介绍 cron表达式类似就java中的正则通过cron表达式可定义周期性的任务计划。 许多开源的定时任务框架大多支持cron表达式 4.2 cron表达式语法介绍 ​ xxl-job同样支持通过cron表达式来控制任务周期性调度执行表达式包含7个部分分别从秒、分、时、日、月、星期、年七个时间维度来定义任务执行的周期 cron表达式时间取值范围 cron表达式格式 * * * * * * * - - - - - - - | | | | | | | | | | | | | year [optional] | | | | | ----- day of week (1 - 7 | | | | ---------- month (1 - 12) | | | --------------- day of month (1 - 31) | | -------------------- hour (0 - 23) | ------------------------- min (0 - 59) ------------------------------ second (0 - 59)字段允许值允许的特殊字符秒0-59, - * /分0-59, - * /小时0-23, - * /月内日期1-31, - * ? / L W C月1-12 或者 JAN-DEC, - * /周内日期1-7 或者 SUN-SAT注意周日是1周一为2周六位7, - * ? / L C #年可选留空, 1970-2099, - * / 特殊字段含义 特殊字符意义*匹配所有的值。如*在分钟的字段域里表示 每分钟?只在日期域和星期域中使用。它被用来指定“非明确的值” 不关心-指定一个范围。如“10-12”在小时域意味着“10点、11点、12点”,指定几个可选值。如“MON,WED,FRI”在星期域里表示“星期一、星期三、星期五”/指定增量。如“0/15”在秒域意思是每分钟的01530和45秒。“5/15”在分钟域表示每小时的52035和50。符号“”在“/”前面如/10等价于0在“/”前面如0/10L表示day-of-month和day-of-week域但在两个字段中的意思不同例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’如果在day-of-week域中前面加上数字它表示一个月的最后几天例如‘6L’就表示一个月的最后一个星期五(在西方周末索引位为1那么周一就是2其它一次类推)W只允许日期域出现。这个字符用于指定日期的最近工作日。例如如果你在日期域中写 “15W”表示这个月15号最近的工作日。所以如果15号是周六则任务会在14号触发。如果15好是周日则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六那么任务也只会在下周一也就是3号触发“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用不能够是一个数字段如1-15W是错误的LWL和W可以在日期域中联合使用LW表示这个月最后一周的工作日#只允许在星期域中出现。这个字符用于指定本月的某某天。例如“6#3”表示本月第三周的星期五6表示星期五3表示第三周。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三 参考cron在线表达式https://www.matools.com/cron/ 4.3 cron表达式阅读练习 10 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务20 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业 ★★★30 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作40 0 10,14,16 * * ? 每天上午10点下午2点4点50 0/30 9-17 * * ? 朝九晚五工作时间内每半小时60 0 12 ? * WED 表示每个星期三中午12点70 15 10 * * ? 每天上午10:15触发80 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发90 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发100 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发120 15 10 L * ? 每月最后一日的上午10:15触发130 15 10 ? * 6L 每月的最后一个星期五上午10:15触发5、总结 知识梳理 5.1 XXL-JOB 执行原理 XXL-JOB 分布式任务调度服务由调度中心和执行器组成调用中心负责按任务调度策略向执行器下发任务执行器负责接收任务并执行。 5.2 XXLO-JOB 工作流程 首先部署并启动xxl-job调度中心。(一个java工程)首先在微服务添加xxl-job依赖在微服务中配置执行器启动微服务执行器向调度中心上报自己。在微服务中写一个任务方法并用xxl-job的注解去标记执行任务的方法名称。在调度中心配置任务调度策略调度策略就是每隔多长时间执行还是在每天或每月的固定时间去执行比如每天0点执行或每隔1小时执行一次等。在调度中心启动任务。调度中心根据任务调度策略到达时间就开始下发任务给执行器。执行器收到任务就开始执行任务。 5.3 如何保证任务不重复执行 调度中心按分片广播的方式去下发任务执行器收到作业分片广播的参数:分片总数和分片序号计算 任务id 除以 分片总数得到一个余数如果余数等于分片序号这时就去执行这个任务这里保证了不同的执行器执行不同的任务。配置调度过期策略为“忽略”避免同一个执行器多次重复执行同一个任务配置任务阻塞处理策略为“丢弃后续调度”注意:丢弃也没事下一次调度就又可以执行了另外还要保证任务处理的幂等性执行过的任务可以打一个状态标记已完成下次再调度执行该任务判断该任务已完成就不再执行
http://www.laogonggong.com/news/105660.html

相关文章:

  • 精美网站设计欣赏wordpress怎么安装上服务器
  • wordpress 4.4.2 中文潍坊网站的优化
  • 星月教你做网站做一个app融资需要多少钱
  • 网站建设中的页数软件平台架构
  • 网站模板源码下载不利于网站收录
  • 个人动漫网站怎么做页面wordpress插件小人
  • 网站排名怎么弄网站如何做微信支付宝
  • 通许画册设计网站网站开发怎么入账
  • 国际贸易网站建设社区源码app
  • 建设地区网站建议怎么制作网站图片不显示
  • 营销网站策划方案宝安专业做网站
  • 网站广告位投放上海人才招聘哪个网站好
  • 天马网络网站网站在百度的标头不对
  • wordpress禁止截图青岛关键词优化seo
  • 有高级感的公司名字淘宝seo是指
  • 建立网站有哪些步骤东莞网站建设流程
  • 怎么访问域名网站吗流程图制作软件
  • 表白网站制作平台wordpress手动降级
  • wordpress底部链接修改山东网站seo公司
  • 北京网站建设知名公司排名wordpress评论 是哪个页面
  • 江西华邦网站建设做自己视频教程的网站
  • 山西推广型网站建设建设局网站新闻
  • 网站的建设与维护需要资质吗wordpress 上一页下一页
  • vs用户登录注册网站建设代码wordpress手机版下载
  • 徐州模板建站平台淘宝内部优惠券网站怎样做的
  • 威县网站建设报价免费推广网站都有哪些
  • 贵阳官方网站农业信息网站建设概念
  • 网站右边悬浮代码网站自动生成系统
  • 网站导航是怎么做的企业网站用什么技术做
  • wordpress网站访问量如何有效提高网站排名