范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

几种主流的分布式定时任务,你知道哪些?

  单点定时任务JDK原生
  自从JDK1.5之后,提供了 ScheduledExecutorService  代替TimerTask来执行定时任务,提供了不错的可靠性。public class SomeScheduledExecutorService {     public static void main(String[] args) {         // 创建任务队列,共 10 个线程         ScheduledExecutorService scheduledExecutorService =                 Executors.newScheduledThreadPool(10);         // 执行任务: 1秒 后开始执行,每 30秒 执行一次         scheduledExecutorService.scheduleAtFixedRate(() -> {             System.out.println("执行任务:" + new Date());         }, 10, 30, TimeUnit.SECONDS);     } } Spring Task
  Spring Framework  自带定时任务,提供了cron表达式来实现丰富定时任务配置。新手推荐使用https://cron.qqe2.com/  这个网站来匹配你的cron表达式  。@Configuration @EnableScheduling public class SomeJob {     private static final Logger LOGGER = LoggerFactory.getLogger(SomeJob.class);      /**      * 每分钟执行一次(例:18:01:00,18:02:00)      * 秒 分钟 小时 日 月 星期 年      */     @Scheduled(cron = "0 0/1 * * * ? *")     public void someTask() {        //...     } }
  单点的定时服务在目前微服务的大环境下,应用场景越来越局限,所以尝鲜一下分布式定时任务吧。 基于 Redis 实现
  相较于之前两种方式,这种基于Redis的实现可以通过多点来增加定时任务,多点消费。但是要做好防范重复消费的准备。 通过ZSet的方式
  将定时任务存放到ZSet集合中,并且将过期时间存储到ZSet的Score字段中,然后通过一个循环来判断当前时间内是否有需要执行的定时任务,如果有则进行执行。
  具体实现代码如下: /**  * Description: 基于Redis的ZSet的定时任务 .
  *  * @author mxy  */ @Configuration @EnableScheduling public class RedisJob {     public static final String JOB_KEY = "redis.job.task";     private static final Logger LOGGER = LoggerFactory.getLogger(RedisJob.class);     @Autowired private StringRedisTemplate stringRedisTemplate;      /**      * 添加任务.      *      * @param task      */     public void addTask(String task, Instant instant) {         stringRedisTemplate.opsForZSet().add(JOB_KEY, task, instant.getEpochSecond());     }      /**      * 定时任务队列消费      * 每分钟消费一次(可以缩短间隔到1s)      */     @Scheduled(cron = "0 0/1 * * * ? *")     public void doDelayQueue() {         long nowSecond = Instant.now().getEpochSecond();         // 查询当前时间的所有任务         Set strings = stringRedisTemplate.opsForZSet().range(JOB_KEY, 0, nowSecond);         for (String task : strings) {             // 开始消费 task             LOGGER.info("执行任务:{}", task);         }         // 删除已经执行的任务         stringRedisTemplate.opsForZSet().remove(JOB_KEY, 0, nowSecond);     } }
  适用场景如下: 订单下单之后15分钟后,用户如果没有付钱,系统需要自动取消订单。 红包24小时未被查收,需要延迟执退还业务; 某个活动指定在某个时间内生效&失效;
  优势是: 省去了MySQL的查询操作,而使用性能更高的Redis做为代替; 不会因为停机等原因,遗漏要执行的任务; 键空间通知的方式
  我们可以通过Redis的键空间通知来实现定时任务,它的实现思路是给所有的定时任务设置一个过期时间,等到了过期之后,我们通过订阅过期消息就能感知到定时任务需要被执行了,此时我们执行定时任务即可。
  默认情况下Redis是不开启键空间通知的,需要我们通过 config set notify-keyspace-events Ex  的命令手动开启。开启之后定时任务的代码如下:自定义监听器 /**   * 自定义监听器.   */ public class KeyExpiredListener extends KeyExpirationEventMessageListener {     public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {         super(listenerContainer);     }      @Override     public void onMessage(Message message, byte[] pattern) {         // channel         String channel = new String(message.getChannel(), StandardCharsets.UTF_8);         // 过期的key         String key = new String(message.getBody(), StandardCharsets.UTF_8);         // todo 你的处理     } } 设置该监听器/**  * Description: 通过订阅Redis的过期通知来实现定时任务 .
  *  * @author mxy  */ @Configuration public class RedisExJob {     @Autowired private RedisConnectionFactory redisConnectionFactory;     @Bean     public RedisMessageListenerContainer redisMessageListenerContainer() {         RedisMessageListenerContainer redisMessageListenerContainer = new RedisMessageListenerContainer();         redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);         return redisMessageListenerContainer;     }      @Bean     public KeyExpiredListener keyExpiredListener() {         return new KeyExpiredListener(this.redisMessageListenerContainer());     } }
  Spring会监听符合以下格式的Redis消息 private static final Topic TOPIC_ALL_KEYEVENTS = new PatternTopic("__keyevent@*");
  基于Redis的定时任务能够适用的场景也比较有限,但实现上相对简单,但对于功能幂等有很大要求。从使用场景上来说,更应该叫做延时任务。
  场景举例: 订单下单之后15分钟后,用户如果没有付钱,系统需要自动取消订单。 红包24小时未被查收,需要延迟执退还业务;
  优劣势是: 被动触发,对于服务的资源消耗更小; Redis的Pub/Sub不可靠,没有ACK机制等,但是一般情况可以容忍; 键空间通知功能会耗费一些CPU 分布式定时任务引入分布式定时任务组件or中间件
  将定时任务作为单独的服务,遏制了重复消费,独立的服务也有利于扩展和维护。 quartz
  依赖于MySQL,使用相对简单,可多节点部署,通过竞争数据库锁来保证只有一个节点执行任务。没有图形化管理页面,使用相对麻烦。 elastic-job-lite
  依赖于Zookeeper,通过zookeeper的注册与发现,可以动态的添加服务器。 多种作业模式 失效转移 运行状态收集 多线程处理数据 幂等性 容错处理 支持spring命名空间 有图形化管理页面 LTS
  依赖于Zookeeper,集群部署,可以动态的添加服务器。可以手动增加定时任务,启动和暂停任务。 业务日志记录器 SPI扩展支持 故障转移 节点监控 多样化任务执行结果支持 FailStore容错 动态扩容 对spring相对友好 有监控和管理图形化界面 xxl-job
  国产,依赖于MySQL,基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务。 弹性扩容 分片广播 故障转移 Rolling实时日志 GLUE(支持在线编辑代码,免发布) 任务进度监控 任务依赖 数据加密 邮件报警 运行报表 优雅停机 国际化(中文友好) 总结
  微服务下,推荐使用xxl-job这一类组件服务将定时任务合理有效的管理起来。而单点的定时任务有其局限性,适用于规模较小、对未来扩展要求不高的服务。
  相对而言,基于spring task的定时任务最简单快捷,而xxl-job的难度主要体现在集成和调试上。无论是什么样的定时任务,你都需要确保: 任务不会因为集群部署而被多次执行。 任务发生异常得到有效的处理 任务的处理过慢导致大量积压 任务应该在预期的时间点执行
  中间件可以将服务解耦,但增加了复杂度
  来源:juejin.cn/post/6930912870058328071

卖牛肉的郭宏才,玩比特币的宝二爷在币圈,他就是江湖。郭宏才,币圈人称宝二爷,他却常常自称卖牛肉的。2018年3月,他在硅谷购置了一套百亩大的豪宅。4月23日这一天,他将印有韭菜庄园的牌子正式挂在了大门口。这里是硅萧田国DevOps时代,未来已来如今,互联网的新浪潮云计算正席卷而来,所有公司都会变成软件公司这一趋势正在加速实现。如今,虽然互联网领先企业在软件研发效能方面已有诸多优秀实践。但对于互联网中小企业及广大传统企业来荣耀X20max的市场定位在荣耀magic3发布会上,姜桂荣发布了荣耀X20,并以彩蛋的形式公布了荣耀X20max的存在发布会彩蛋荣耀X20它就要来了。一荣耀X20Max会是怎么样的一部手机?据透露将会配备高端轻薄本怎么选?华为联想华硕领衔,这3款值得入手随着暑假进入尾声,不少朋友都准备着要更新升级自己的电脑设备,毕竟它可是要承担我们的学习与娱乐的重任,而轻薄本无疑是大家的选购热点。不管是学生党还是上班族,购买轻薄本既要考虑到外观精850W准铂金架构鑫谷GP950G黑金全模版电源在中高端电源中,大功率全模组80PLUS金牌认证已经成为标配。同时,有的产品为了体现差异化,在售后上提供了5年甚至10年超长质保。此外,也有一些电源产品不走寻常路,比如鑫谷推出的G美不定义,美自定义。用荣耀50系列HONORCode,享潮流人生8月30日,演员龚俊所代言的荣耀50系列限量版新色HONORCode手机正式闪亮登场。此次荣耀50系列限量版新色HONORCode突破了现市面上所有手机的潮流边界,首次引入了时尚奢都说年轻人的手机好看就够了?vivoS10Pro还加码了这些体验伴随着手机技术的快速发展,人们在对手机的选购要求上也变得越来越严苛,相比之前的好看就行现在更讲究于设计与体验的双优秀。那么,市面上到底有没有适合年轻人购买的产品呢?其实还是有的,对怎么看待有些00后,鞋子衣服都要牌子,还必须用苹果手机?不一定呀,我也是00后,手机喜欢用荣耀和小米。很高兴回答这个问题,我说说我自己的看法吧这还是要看自己的消费能力吧,如果收入挺高无可厚非,如果家里挺困难的再有这样的要求就有点过分了。Win7搜索功能无法使用怎么办?Win7系统计算机包含大量方便的功能,如计算机搜索,但最近使用Win7系统用户反映计算机搜索功能,如果我有这个问题,我该怎么办?让我们来看看小编的解决方案。无法使用Win7搜索功能黑鲨4Pro体验144Hz触控电竞屏,为游戏而生俗话说术业有专攻,在游戏手机市场中,当然不得不能提及黑鲨这个品牌。目前经过3代产品的更迭,黑鲨俨然已经对游戏手机这一概念有了深刻而独特的了解,并不断深入创造更好的游戏手机而努力。不电脑突然蓝屏?5大罪魁祸首终于找到了你们发现电脑有个毛病没你不用它的时候乖巧可爱你用它的时候时不时任性难哄可能正在完成某项重要工作它突然来个蓝屏大罢工彻底压死成年人的最后一根救命稻草终于让我哇地一声哭了出来你就说气不
智能窗帘是什么样子,怎么安装使用,今天一起普及下智能窗帘简单来讲就是一根电动轨道和一个电机电动轨道和普通的轨道类似,增加了一些传动部分,替换普通轨道即可安装使用。上图就是智能窗帘的一套图,然后安装完之后,挂上窗帘即可使用只需要测一套智能窗帘,只要299,还保10年,够不够优惠?今天给大家介绍一款,2021新款智能窗帘,这款是采用双芯片控制,可以直连小米米家APP和天猫精灵APP,2个APP都可以控制,同时还可以支持小爱同学声控天猫精灵声控Siri声控。话MIUI现在是否已到巅峰?不是,接下来会更好说到小米的MIUI系统就需要从小米的创建说起。雷军在没有创办小米的时候,最先推出MIUI系统的,当时手机产业比较杂。除了苹果的iOS以外,基本上没有几个像样的系统。这时小米的MIU为何都想灭掉小米?只有小众手机品牌想灭小米这个问题需要拆开回答。真的想干掉小米的是其他比较小众的手机品牌。因为小米的成功让其他外行人看到了希望,个人感觉当初的智能手机制造潮就是小米掀起的。毕竟一个互联网公司可以在智能手机市暴涨近10倍!小米抢占三星华为份额,登顶中东欧市场尽管已经上班两天了,但是仍然还是有很多小伙伴在感慨国庆假期的飞逝。其实,相较于七天长假的离去,更让人震惊的是2021年已经过去三个季度了,仅剩下了一个季度留给我们。而随着时间逐渐来荣耀为何总提要超越华为,这是过渡品牌效应吗?这都不用争了,华为都快退出了。荣耀这样说并不是要与华为竞争,而且要在消费者心中代替华为。也就是说,用十分低成本的方式,把华为的品牌效应过渡给荣耀。没发现,荣耀现在提到的手机品牌只有华为鸿蒙商标被驳回复审,龙岗无敌手这次败了龙岗无敌手看来还是不如南山必胜客,也有输的时候。其实商标抢注的事,国际上非常频繁,苹果当初进入国内也买了很多商标。至于华为商标被驳回到底是什么情况呢?根据企查查显示,华为技术有限公小米为何不学华为自研芯片?难度太大,风险太大实力不够钱不够风险太大。华为海思设计出的麒麟芯片,可以说是目前国内市场上最先进的手机芯片,没有之一。而麒麟系列芯片走到和高通芯片同级别时间至少是十年,在这过程中华为投入了一千亿以上办公室电脑蓝屏代码大全合集相信很多办公室的朋友们因为电脑老旧等问题会出现电脑蓝屏问题而苦恼,现把个人收藏的蓝屏代码合集分享给大家,需要的可以收藏文章,关注下以后会有更多好用是的办公室必备技能,以备不时之需。办公电脑必备软件指南办公电脑讲究安全,无广告,这里推荐一些小而精的电脑办公软件给大家,有没有说到的希望大家能评论区多多补充。都附带了官网下载链接,最好支持正版哦!一电脑清理1Geek首选Geek是因为装模作样一键隐藏电脑窗口软件名称装模作样能让你在上班时间聊QQ,玩游戏,看电影,淘宝购物的时候,为了防止被老板发现,当老板突然出现时,你只需要轻轻一按预先设置好的热键,就能快速将QQ聊天对话框,游戏界面,