缺点:不支持分布式(只能一个任务在一台服务器上执行,不能分片)
将一个任务拆分成多个独立的任务项,由分布式的服务器分别执行某一个或几个分片项。而传统的定时器任务都在一台服务器上执行,如果数据很大那么压力很大。
举例:处理一百万的订单: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 只能出现在日期内,表示最接近这个日期的工作日
很多人想投身游戏行业,成为真正的游戏制作人。但是他们对游戏的制作过程,和各个职位的职能都是比较陌生的。对网页游戏开发也不够了解,游戏到底是怎么制作出来的呢?\x0d\x0a\x0d\x0a网页游戏开发的程序构成分为三大部分:第一是数据流程。第二是美术。第三是程序。\x0d\x0a1、数据流程\x0d\x0a数据流程其中,数据流程包括了功能。也只有在功能中才能体现数据流程。\x0d\x0a比如最简单的卖买产品。要实现这个功能,那么需要有产品基础表、产品详细表、商店表、背包表。如果扩展性更强,相应的双表是少不不了的。\x0d\x0a表的问题都简单了,关键是这个物品有什么用,这样物品的来源,一大堆数据,物品的走向,又是一大堆数据。最后,这些数据得绕成一个圈。绕圈是一件困难的事情,特别是功能和道具多了起来的时候。难度是2的n次方。\x0d\x0a2、美术\x0d\x0aUI:简洁漂亮的界面总会有好处。\x0d\x0a小图标:道具,地图,装备,一类至少10个吧?大体上百把个是需要的。\x0d\x0a3、程序分5个部分\x0d\x0a数据库:一大堆基础数据表和详细数据表。基础数据表:比如等级1到等级100的用户的属性初始值。详细数据表:每个用户的具体属性。\x0d\x0a功能页面、功能函数。主要就是数据存取,判断,数据走向。\x0d\x0aajax函数:(可选)某些需要伪即时的功能要用到。\x0d\x0ajavascript函数:(可选)模拟客户端的数据计算。也就是webgame的与时间相关的数据。分为两部分。一部分是真实数据,是由服务器端的定时器计算的。另一部分是只有初始值,客户端显示用的。不需要即时同步,仅仅需要模拟同步就行。\x0d\x0a服务器定时器:(C语言或自己设定服务器)定时循环执行某一段代码。而这段代码主要是根据数据库的数据进行更新。这个可以找个C语言程序员来做。对于C语言程序员来讲,这个功能是相当的简单。当然,具体的处理数据的判断和操作数据库,需要你自己写。让C语言程序员给你段标准代码就行了。完全支持sql语句的。\x0d\x0a当然在网页游戏开发前,还要组织相关的专业人才,制作一款网络游戏需要的最核心人才是原画、2D、3D、程序设计、策划等这些方面的人才是必不可少的,因此,要开发一个网页游戏除了要程序员以外,千万不要忘了准备以上人才。欢迎分享,转载请注明来源:夏雨云
评论列表(0条)