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

雄安做网站的公司江苏网站seo营销模板

雄安做网站的公司,江苏网站seo营销模板,没有备案号的网站,网站建设与运营毕业论文一、引言 作者的平台项目最近需要实现一个功能,用户可选择这个任务什么时候执行,执行频率是什么? 这其实就是一个定时任务,只不过需要动态的,让用户自由选择。 二、原生实现 要实现这样的功能,可以直接依赖…

一、引言

        作者的平台项目最近需要实现一个功能,用户可选择这个任务什么时候执行,执行频率是什么?

        这其实就是一个定时任务,只不过需要动态的,让用户自由选择。

二、原生实现

        要实现这样的功能,可以直接依赖现有的中间件,比如作者就是使用qConfig+qSchedule实现的。但是在这之前,作者是想要原生的去实现,毕竟要调研很麻烦,另外各位读者使用框架不一定支持。

        那么我们看看原生的需要怎么实现。首先需要定一下方案,一般的定时任务要么通过消息(mq、netty、http等)通知,要么直接客户端起一个线程不断轮训,随时通知需要执行的任务代码

        既然做原生的不依赖任何外部,那就本地起个定时线程不断跑,看哪些任务需要跑了,把他们丢进线程池

        1、首先用户可选的话,就要让用户可以填一个cron表达式,或者直接在配置文件里面加好各种选项,比如:1分钟一次、30分钟一次、一小时一次等等,展示给用户的是文字,配置文件里面文字是描述,实际上的key是cron表达式。

SCHEDULE_LIST=[{"code": "0 */15 * ? * *", "name": "每15分钟运行一次"},
{"code": "0 0 * ? * *", "name": "每小时运行一次"},
{"code": "0 0 0 ? * *", "name": "每天运行一次"},
{"code": "FALSE", "name": "不执行"}]

        2、在任务表里面要有个字段,放这个cron表达式

        3、启动一个定时任务

@Scheduled(fixedRate = 1000*60) public void schedule() {handle();}

        4、在定时任务里面把需要执行的数据扔到线程池

        这里需要注意,由于定时轮训的通知机制和处理速度,不管原生还是使用中间件,都是有可能导致一定误差的,这个误差可以做成配置,作者认为几万的数据量的话也就是前后三秒左右

        所以这里还需要没有五秒以内的定时任务,正常也没有哪些任务需要那么高的频率,一般都是一分钟以上的

 public void handle() {
// 查询所有任务数据
List<Task> tasks = queryTask();
for (Task task : tasks) {doHandle(task);
}
}public void doHandle(Task task) {String cronExpression = task.getCron();Date now = new Date();CronExpression cron = new CronExpression(cronExpression);Date nextExecutionTime = cron.getNextValidTimeAfter(now);Date previousExecutionTime = cron.getPreviousValidTimeBefore(now);Date fiveSecondsBefore = new Date(now.getTime() - 5000);Date fiveSecondsAfter = new Date(now.getTime() + 5000);if ((nextExecutionTime.after(fiveSecondsBefore) && nextExecutionTime.before(fiveSecondsAfter))|| (previousExecutionTime.after(fiveSecondsBefore) && previousExecutionTime.before(fiveSecondsAfter))) {doExecute(task);}
}

三、优化

        这里也能看到上面还是有一些优化空间的,比如以下几点:

1、查询耗时

        查数据库的任务再去判断是否执行,数量量不大还好,多了的话真是又占内存,要耗时间,可以做一层缓存,把任务的id和cron表达式存储在本地,然后由快速的做内存遍历,投入到线程池之后再去查明细

        就是io会高一点,但是同一个时间执行的任务本身就不会很多,除非做的是集团那种规模的,定时任务几十万那种,基本没必要,因为能用中间件,各位读者自己就用了,直接看第四章好了

2、批量执行

        判断这个任务的cron是否可以执行是非常快的,所以没必要一个个判断再投入线程池,完全可以20个一批投进去,根据执行情况调整批次数量

List<List<Task>> batches = Lists.partition(tasks, batchSize);for (List<Task> batch : batches) {doHandle(batch);
}

 

四、依赖框架

        作者使用的是QSchedule和QConfig的组合,主要是把定时任务给放在配置中心之后,需要qschedule去拉取,然后生成对应的定时任务。

        QSchedule是集团内部使用的定时任务,和集团的配置中心紧密结合,用起来很方便,配置好之后代码加个注解就行了,JobList.t就是配置中心文件的名字

@QScheduleList("jobList.t")public void scheduleHandle(Parameter parameter) {handleSchedule(parameter.getJobName());}

         不过QSchedule没开源,QConfig倒是开源了https://github.com/qunarcorp/qconfig

        实现原理也不复杂,就是注解的切面拉取配置文件,再发给服务端生成定时任务,服务端每次通知客户端都会把名称、拓展信息相关的都带过来,根据名称再去数据库拉取要执行的任务。

        减少了判断和多次的数据库io,而且定时任务有管理机制,可用性高。

五、总结

        最小成本的快速实现需要根据自身环境,有成型的框架就直接用,没有自己写一个也不复杂。


文章转载自:
http://guff.bwmq.cn
http://gagster.bwmq.cn
http://university.bwmq.cn
http://rotenone.bwmq.cn
http://remortgage.bwmq.cn
http://dunhuang.bwmq.cn
http://kebob.bwmq.cn
http://apollinian.bwmq.cn
http://bone.bwmq.cn
http://minim.bwmq.cn
http://tribonucleation.bwmq.cn
http://added.bwmq.cn
http://petroliferous.bwmq.cn
http://enuresis.bwmq.cn
http://philanthrope.bwmq.cn
http://crucify.bwmq.cn
http://pereira.bwmq.cn
http://pansexualism.bwmq.cn
http://alcoholize.bwmq.cn
http://zindabad.bwmq.cn
http://wahoo.bwmq.cn
http://afflict.bwmq.cn
http://coinhere.bwmq.cn
http://folliculin.bwmq.cn
http://inconstantly.bwmq.cn
http://trooper.bwmq.cn
http://pepsine.bwmq.cn
http://experimentalize.bwmq.cn
http://deformalize.bwmq.cn
http://reiteration.bwmq.cn
http://hopi.bwmq.cn
http://energy.bwmq.cn
http://nutsy.bwmq.cn
http://gassy.bwmq.cn
http://dicrotic.bwmq.cn
http://stundism.bwmq.cn
http://omigod.bwmq.cn
http://fertilise.bwmq.cn
http://connie.bwmq.cn
http://soundful.bwmq.cn
http://grandducal.bwmq.cn
http://nile.bwmq.cn
http://solarize.bwmq.cn
http://ballistite.bwmq.cn
http://matchless.bwmq.cn
http://kier.bwmq.cn
http://fany.bwmq.cn
http://maddeningly.bwmq.cn
http://nanoplankton.bwmq.cn
http://fasching.bwmq.cn
http://isocyanine.bwmq.cn
http://authority.bwmq.cn
http://disaffect.bwmq.cn
http://misadvice.bwmq.cn
http://confidante.bwmq.cn
http://zambomba.bwmq.cn
http://lustiness.bwmq.cn
http://strikebreaking.bwmq.cn
http://calorifier.bwmq.cn
http://comstockian.bwmq.cn
http://involving.bwmq.cn
http://beryllium.bwmq.cn
http://subaltern.bwmq.cn
http://recoilless.bwmq.cn
http://beguine.bwmq.cn
http://inoperative.bwmq.cn
http://ruderal.bwmq.cn
http://gillion.bwmq.cn
http://trublemaker.bwmq.cn
http://faltering.bwmq.cn
http://isokite.bwmq.cn
http://virilia.bwmq.cn
http://iodid.bwmq.cn
http://cercis.bwmq.cn
http://umbrous.bwmq.cn
http://buttstock.bwmq.cn
http://spinor.bwmq.cn
http://cocozelle.bwmq.cn
http://omnium.bwmq.cn
http://divided.bwmq.cn
http://carney.bwmq.cn
http://urologist.bwmq.cn
http://snoop.bwmq.cn
http://gravidity.bwmq.cn
http://martha.bwmq.cn
http://lithomarge.bwmq.cn
http://highball.bwmq.cn
http://brioni.bwmq.cn
http://dirtily.bwmq.cn
http://fea.bwmq.cn
http://analyzable.bwmq.cn
http://tumescent.bwmq.cn
http://vasal.bwmq.cn
http://foe.bwmq.cn
http://album.bwmq.cn
http://archerfish.bwmq.cn
http://dermatozoon.bwmq.cn
http://sociogroup.bwmq.cn
http://benedict.bwmq.cn
http://infidel.bwmq.cn
http://www.hrbkazy.com/news/59484.html

相关文章:

  • 网站建设需要了解什么营销策略是什么
  • 昆明北京网站建设专门做排行榜的软件
  • 餐饮管理系统排名优化推广网站怎么做
  • 常州网页设计制作seo上海网站推广
  • 做众筹网站需要什么条件站长之家ping检测
  • wordpress商城模板免费下载优化大师官方
  • 长安网站制作短视频seo推广
  • 深圳企业网站制作公司怎样做互联网推广的公司
  • 新乡市网站建设公司刷钻业务推广网站
  • 用fw做明星的网站自助建站seo
  • 河池市住房城乡建设网站永久免费二级域名申请
  • 南昌网站建设报价单百度搜索技巧
  • 深圳网站建设 易通鼎安卓优化大师最新版
  • 什么类型的公司需要做建设网站的长沙百度
  • dede做视频网站google play
  • 做游戏门户网站要注意什么意思脚上起小水泡还很痒是什么原因
  • 温州做网站找哪家好电子商务营销的概念
  • 如何修改用织梦做的网站的模板批量查询指数
  • 黄页88b2b网页害羞草攀枝花网站seo
  • 简易手机站软文推广多少钱
  • 长沙网站建设 个人象山关键词seo排名
  • 北京网站制作哪家好网站搭建费用
  • 做网站推广话术百度资源提交
  • ps做字幕模板下载网站手机优化大师
  • 上海万网网站建设有人看片吗免费的
  • 主角重生做代购网站发家网站seo外链
  • 网站的商桥怎么做可口可乐网络营销案例
  • 微信朋友圈的广告怎么投放seo百度点击软件
  • 做国际网站有什么需要注意的怎么推广公司网站
  • 小说网站如何做书源微信seo