服务器通过设置什么定时器来确认是否有必要继续保留长时间没有数

服务器通过设置什么定时器来确认是否有必要继续保留长时间没有数,第1张

保活定时器。保活定时器作用:应对TCP连接期间,客户端和服务端长时间无数据传输的情况。服务器(serer)指在网络环境中或在具有客户服务器结构的分布式管理环境中,为客户的请求提供服务的节点计算机,或指在该计算机上运行的,用于管理资源并为用户提供服务的计算机软件。

优点:与spring集成、动态添加任务、支持集群

缺点:不支持分布式(只能一个任务在一台服务器上执行,不能分片)

将一个任务拆分成多个独立的任务项,由分布式的服务器分别执行某一个或几个分片项。而传统的定时器任务都在一台服务器上执行,如果数据很大那么压力很大。

举例:处理一百万的订单:A服务器处理尾数偶数的订单,B服务器处理尾数奇数的订单。

整合java项目

1、引入quartz 依赖

2、quartz.properties

3、

注意:

1、每一个job执行都是一个新的线程(即使是同一个任务,这个elastic-job不同)但是如果在配置文件quartz.properties中配置的线程消耗完,也还是会陷入阻塞的。根据业务来预估线程池的大小。(所以的任务共享一个线程池)

2、每一个job执行都会创建一个新的job对象,所以想通过job的成员变量来传递信息是不可行的(每次都会初始化)

3、myJob类必须要有空的构造方法

1、方式1:在创建jobDetail是传递JobDataMap,然后通过JobExecutionContext获取JobDataMap

2、方式2:在myjob中定义成员变量,并生成get,set方法

上面我们知道任务间都是并发处理的,那么要考虑并发安全问题。

1、使用@DisallowConcurrentExecution

使用@PersistJobDataAfterExecution注解和jobDataMap.put方法

1、startTime属性:设置trigger第一次触发的时间

2、endTime属性:表示trigger的失效时间点

3、优先级(priority)当多个Trigger并发执行,但是线程不够时触发,会优先执行级别高的Trigger

TriggerBuilder.newTrigger().withPriority(10);

默认时5,数字越大优先级越高

4、错过触发(misfire instructions)

1、withMisfireHandlingInstructionDoNothing策略:错过了什么都不做,等待下一次触发时间

设置每5秒执行一次,任务7秒。

发现这样是不会生效的,因为内部判断了一下错过的时间是否大于misfireThreshold这个值(默认5秒),如果小于还是立即执行。这里我们只失效了2秒,是小于5秒的。

通过quartz.properties设置misfireThreshold的值

这样再运行,发现withMisfireHandlingInstructionDoNothing策略生效了。

2、withMisfireHandlingInstructionFireAndProceed策略:错过立即执行

5、日历(calendar)

1、可以在具体的时间点执行一次

2、可以按照指定间隔时间重复若干次

1、使用cron表达式触发

, 代表并且,如果10,20 10秒和20秒都指向

? 只能出现在日期和星期内,代表没有特定的值。如果使用*号日期了星期会有歧义,这是使用?

L 只能出现在日期和星期内,表示月的最后一天,或者星期六

W 只能出现在日期内,表示最接近这个日期的工作日


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/228648.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-09
下一篇2023-04-09

发表评论

登录后才能评论

评论列表(0条)

    保存