Java教程之基于XXL-JOB实现分布式任务调度的实现

背景

笔者以前在电商公司,我们需要在8月18号做大促活动,我们会提前一天给所有的用户推送活动信息,且需要根据用户画像生成不同的推送内容。

当时我们总共有80万用户左右。

经测试,通过Spring Task和分布式锁,单台机器同时开启5个线程,执行时间需要27个小时左右,即便开10个线程,需要14个小时左右,显然执行时间过长。

解决方案

当时个推服务部署节点有3台,在每年大促期间可动态扩容,其余的机器资源没有充分利用起来。

要想短时间内完成推送,那么就得想办法让每台机器各自分一部分用户数据去执行,这样效率可提高原来的N倍。

那么就需要分布式任务去执行,核心思想如下图:

Java教程之基于XXL-JOB实现分布式任务调度的实现

经过调研现有的开源的分布式任务调度框架,决定在elastic-job和xxl-job中选一个

Elastic Job是当当网开源一个分布式调度解决方案,由两个相互独立的子项目Elastic-Job-Lite和Elastic-Job-Cloud组成;定位为轻量级无中心化解决方案,使用 jar 包的形式提供分布式任务的协调服务。支持分布式调度协调、弹性扩容缩容、失效转移、错过执行作业重触发、并行调度、自诊断和修复等等功能特性。

XXL-Job官网是大众点评发布的分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

更倾向于选择XXL-JOB:

轻量级,支持通过Web页面对任务进行动态CRUD操作,操作简单只依赖数据库作为集群注册中心,接入开发简单,不需要ZK高可用、解耦、高性能、监控报警、分片、重试、故障转移团队持续开发,社区活跃支持后台直接查看每个任务执行实时日志具体实现在项目中集成xxl-job客户端<dependency> <groupId>com.xuxueli</groupId> <artifactId>xxl-job-core</artifactId> <version>2.2.0</version> </dependency>在配置文件中配置xxl-job信息xxl: job: accessToken: admin: addresses: http://xxl部署IP地址:8080/xxl-job-admin executor: appname: vm-service address: ip: port: 9989 logretentiondays: 30新增XxlJobConfig.javapackage com.itheima.config; import com.xxl.job.core.executor.impl.XxlJobSpringExecutor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; / * xxl-job config * * @author xuxueli 2017-04-28 */ @Configuration @Slf4j public class XxlJobConfig { @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; @Bean public XxlJobSpringExecutor xxlJobExecutor() { log.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; } }在xxl-job中新增执行器

注册方式选自动注册,这样方便动态扩容

Java教程之基于XXL-JOB实现分布式任务调度的实现
创建任务

路由策略选择分片广播

Java教程之基于XXL-JOB实现分布式任务调度的实现
代码部分

在任务代码获取推送用户时,根据当前的分片及分片总数对用户ID取余,这样我们就可以在每个分片节点,获取不一样的数据。id值越连续,分片则越均匀。

ShardingUtil.ShardingVO shardingVo = ShardingUtil.getShardingVo(); int numbers = shardingVo.getTotal(); //分片总数 int index = shardingVo.getIndex(); //当前分片索引

假设分片总数为3,当前节点获取到的分片索引为0,那么查询推送用户SQL如下:

SELECT user_id FROM `user_info` WHERE MOD(user_id,3)=0

注意:我们在实际代码中,分片总数和当前分片索引是以参数的形式传给查询的SQL语句的。

如上,即可完成分布式任务。

总结

在某些定时任务需要处理大量数据的情况下,我们可以通过引入分布式任务框架xxl-job,充分利用机器资源,将需要处理的数据均匀的分配到不同的机器上去执行,提高任务执行效率。

免责声明:文章内容来自互联网,本站仅作为分享,不对其真实性负责,如有侵权等情况,请与本站联系删除。
转载请注明出处:Java教程之基于XXL-JOB实现分布式任务调度的实现 https://www.dachanpin.com/a/cyfx/11897.html

(0)
Java教程之教你更优雅的写法处理null检查
上一篇 2023-05-12 03:54:45
午评:科技股走强 创业板指高开高走涨近2%
下一篇 2023-05-12 03:55:48

相关推荐

  • 首届浙中高校创业高峰论坛在浙师大举行

      金华晚报12月29日讯(记者 周轩)一场有深度的头脑SPA、翻阅一本真人图书、一次关于创业的奇葩说、与同伴一道感受夜的温度、在世界咖啡屋碰撞思想……你参加过这样一场新颖的论坛吗?近日,由浙师大创业学院主办,浙师大团委、浙师大创业服务中心承办,金报集团金华三分田电商创业园、温州大学创业学院联合协办的第一届浙中高校创业交流高峰论坛在浙师大落下帷幕。本次论坛为…

    创业分享 2023-05-20
    149
  • 干洗店利润怎么样:UCC国际洗衣少投多赚轻松创业

      投资开干洗店的利润高不高?所以现在投资开干洗店是非常好的选择,只要洗衣质量能够让消费者满意,那么以后来洗衣的人也就更多,获得的利润也就更多,而且加盟一个好的品牌能够让干洗店在现在的市场中脱颖而出,在市场中更加有竞争力。kr6张家界新闻网 免责声明:本文系转载自网络,发布本文为传递更多信息之用,另:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文…

    2023-05-24
    175
  • 解决你的创业难题,加盟百代佳人化妆品让你零经验也能收获成功

      现在的生活变得更加美好,更多的人通过创业实现了他们的财富梦想。但是,用微薄的薪水很难实现自己的梦想,所以品牌合作和开店已成为实现梦想的途径。选择一个好的特许经营品牌尤为重要。 百代佳人为所有企业家提供了三个成功的商店。极大的保护,帮助连锁店在激烈的市场竞争中脱颖而出。 解决你的创业难题,加盟百代佳人化妆品让你零经验也能收获成功 2019/04/28 15…

    2023-05-13
    124
  • 优万家全屋整装定制五大功能玩转家居消费、创业市场

    家具建材市场一直在变化着,尤其是随着消费市场的改变所带来的行业整顿变革越来越明显。显然,近几年我国家居市场的主要消费主力已经逐渐开始转变为年轻一代,八零后、就零食是主力军,而伴随着人们消费观念的变化,消费市场与创业市场同样也悄悄的迎来变革。其中优万家全屋整装定制为市场做了榜样。 很多人诧异家居企业如何打开年轻化市场?仅仅是进入互联网,打造O2O的模式来改变市…

    创业分享 2023-05-18
    186
  • 自主创业我选择了“鱼儿亲水”与您分享我的创业经历

    导读: 我是个大三的在校学生,对于一个即将毕业的我,之前一直想着自己找兼职让自己赚点生活费帮家人减轻点负担,结果并不像我想的那么理想,碰了很多壁,网络上的骗子太多了,还好我没有放弃。 意外情况: 某一天通过一个朋友介绍一个偶然的机会让我遇到了“鱼儿亲水”能量管。朋友当时说:“带上妹妹一起”。“鱼儿亲水”不是那种成年人的游泳馆,而是小孩子的游泳馆,终于明白朋友…

    2023-05-13
    127

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:362039258@qq.com

工作时间:周一至周五,9:30-16:30,节假日休息