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

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

  单点定时任务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() {        //...     } } 复制代码
  单点的定时服务在目前   微服务   的大环境下,应用场景越来越局限,所以尝鲜一下 分布式定时任务   吧。
  关于该功能的使用,DD的Spring Boot教程中也有介绍,感兴趣的小伙伴可以通过这个链接查看:https://blog.didispace.com/spring-boot-learning-2-7-1/   基于 Redis 实现
  相较于之前两种方式,这种基于Redis的实现可以通过多点来增加定时任务,多点消费。但是要做好防范重复消费的准备。   通过ZSet的方式
  将定时任务存放到   ZSet   集合中,并且将 过期时间   存储到 ZSet   的 Score   字段中,然后通过一个循环来判断 当前时间   内是否有需要执行的定时任务,如果有则进行执行。
  具体实现代码如下:   /**  * Description: 基于Redis的ZSet的定时任务 .
   *  * @author mxy  * @Date 2020/8/25 11:54  */ @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  * @Date 2020/8/25 12:07  */ @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命名空间   有图形化管理页面
  关于该框架的实用,DD在博客也连载过,通过这个链接可以直接看详细教程:https://blog.didispace.com/tags/Elastic-Job/
  LTS
  依赖于   Zookeeper   ,集群部署,可以动态的添加服务器。可以手动增加定时任务,启动和暂停任务。 业务日志记录器   SPI扩展支持   故障转移   节点监控   多样化任务执行结果支持   FailStore容错   动态扩容   对spring相对友好   有监控和管理图形化界面   xxl-job
  国产,依赖于   MySQL   ,基于竞争数据库锁保证只有一个节点执行任务,支持水平扩容。可以手动增加定时任务,启动和暂停任务。 弹性扩容   分片广播   故障转移   Rolling实时日志   GLUE(支持在线编辑代码,免发布)   任务进度监控   任务依赖   数据加密   邮件报警   运行报表   优雅停机   国际化(中文友好)   总结
  微服务   下,推荐使用 xxl-job   这一类组件服务将定时任务合理有效的管理起来。而单点的定时任务有其局限性,适用于规模较小、对未来扩展要求不高的服务。
  相对而言,基于   spring task   的定时任务最简单快捷,而 xxl-job   的难度主要体现在集成和调试上。无论是什么样的定时任务,你都需要确保: 任务不会因为集群部署而被多次执行。   任务发生异常得到有效的处理   任务的处理过慢导致大量积压   任务应该在预期的时间点执行
  中间件可以将服务解耦,但增加了复杂度
  作者:襄垣

突破5000万!华为再次迎来好消息,操作系统打破世界新纪录点击关注,每天精彩不断!导读突破5000万!华为再次迎来好消息,操作系统打破世界新纪录!华为作为中国第一大的民营科技企业,实力自然是比较雄厚的,在任正非的带领下,这些年来华为一直都中兴Axon305G搭载新一代摄像头,将于9月海外上市中兴Axon30手机搭载第二代屏下摄像头已于8月3日在中国正式发售,据悉Axon30将会在9月9日海外发售,主要发售地区为欧洲北美亚太非洲以及中东地区。中兴Axon305G搭载6。百度发布昆仑芯2代AI芯片,采用7nm工艺,出道即量产8月18日,百度创始人董事长兼CEO李彦宏在百度世界大会上宣布第2代自研AI芯片昆仑芯2(又称昆仑2),正式量产。值得一提的是,本次不是宣布流片成功,而是直接宣告量产。AI(人工智什么时候iPhone也变得会卡了?在我印象中,iPhone手机是不太会卡的,这里的卡指的是卡顿不丝滑,但不排除一年也许会有一两次直接死机的情况,这种情况一般称之为意外,不能叫卡。仔细回想,好像是更新至iOS11以上深度山寨机永远有市场是杂牌,还是骗子?记者陆柯言2021年,山寨机仍然活着。一场快手直播,炸出了不少陈年的手机品牌。天语糖果酷派纽曼,这些活在记忆中的手机品牌纷纷挤进了直播间,等到人们因为情怀和性价比买单时,却发现它们微测检测蓝牙耳机出口美国需要办理什么认证?随着智能化的发展,智能蓝牙耳机逐渐成为大众人群的必备物品,越来越受人欢迎,逐渐成为市场的宠儿。接下来,微测检测为您整理了蓝牙耳机出口美国所需要的认证要求。蓝牙耳机出口美国需要满足的Android掌机Odin开始众筹,提供天玑900和骁龙845两种版本如今手游已经是掌上游戏市场的最主要部分了,一般玩家可能用触屏来打手游就满足了,但还是有不少相对传统一点的玩家,喜欢实体物理按键,又或者是有玩模拟经典游戏的需要,这时候可能最便宜的方oppofindx3华为p50mate40和荣耀magic3之间,买哪款好?如果非要在这四款手机中选择一款手机进行购买,小芳我个人会更加倾向于oppofindx3这款手机会更多一些。我给到的理由有以下几点,大家不妨参考一下。理由一首先我们先来看一下这四款手飞利浦颈挂式商务降噪耳机N7506火热抢购中不要错过哟这两年的耳机市场上,颈戴式蓝牙耳机开始多了起来,这种耳机的优势在于能够将大部分耳机的重量都集中于项圈部分,使得耳机的佩戴舒适性得到了进一步提升,而不会像一般的蓝牙耳机那样,主要部件资深玩机党在线分享高性价比手机这两款要仔细看如今,手机市场的竞争愈发激烈,这对于我们普通消费者来说,一方面是好事选择变得更多了,一方面也有缺点,那就是在这样的环境中就更难找到最值得的机型了。今天,我就为大家推荐几款以性价比扬静无止境飞利浦颈挂式降噪耳机N7506让商务精英静享超高音质作为一款拥有轻盈机身优雅时尚外观设计的颈挂式降噪耳机,定位商务的飞利浦N7506是一款非常受年轻人喜爱的产品。特别是其别具一格的减压式加宽颈带结构,对于使用者来说相当友好,结合仅8
如果想要造出宇宙航母,人类的科技文明需要达到几层?如果人类制造出宇宙航母那也就意味着人类有了在宇宙间长时间航行的能力,可以往返各个星球。关于这个问题早在1963年苏联宇宙学家尼古拉卡尔达肖夫指数对于文明先进程度的评估主要基于该文明继互联网后,又一行业再起动物起名潮?这头驴半年估值过亿从最初的电商巨头天猫京东以动物命名和作为品牌形象外,在近年来,逐渐的扩展到百度的熊掌美团的袋鼠腾讯的企鹅蚂蚁金融飞猪等等,互联网的动物园扩张的越来越大。不信你看看你手机中的软件,不出行服务行业深度报告后网约车时代将如何演绎?(报告出品方作者中信建投证券,孙晓磊,崔世峰)一共享出行行业正在从快速发展期步入应用成熟期行业探索期(20102015)2010年易到用车成立,专车业务首次出现,标志着中国网约车市全球第一大企业市值超18万亿,是阿里的8倍,相当于英国全年GDP全球最大企业的桂冠会花落谁家?答案自然是各不相同,因为没有统一的标准,企业的大究竟从哪里体现?财富世界500强的答案是企业营收,毕竟500强企业的排名标准就是营收,除了营收,利润和给老年人种草,是不是一门好生意?文张霏编辑李信银发经济的风已经刮了好几年,如今年轻人早已不再是种草生意的专属对象。近几年老年社交平台用户基数不断增长,中国互联网络信息中心发布的第48次中国互联网络发展状况统计报告加价500买mate408256值不值?值不值每个人的标准都不一样,属于见仁见智的问题。你看上了mate40哪些方面呢?拍照?续航?系统?一碰传?多屏协同?还是因为它是华为出品的?想支持民族企业?手机是快速消耗品,五六千害怕被美国监听?意大利率先做出应对,紧急批准华为加入5G建设据环球网报道,美国监听门事件造成的影响,正迅速扩大。在信息安全方面,欧洲向来跟随美国步伐。因此,在美国煽动下,欧洲多国拒绝中国企业华为,理由均是国家安全。然而,真正威胁欧洲安全的正中国软体机器人在马里亚纳海沟突破万米级深潜,刷新世界纪录IT之家6月3日消息据央视财经报道,中国研发出的软体机器人近日在太平洋马里亚纳海沟完成测试,成功突破了万米级深潜,刷新了世界纪录。在深达1万多米的太平洋马里亚纳海沟,浙江大学航空航买旗舰手机就要买顶配版!618最值得入手的顶配手机一览随着现如今手机配置的提升,人们在购买手机的时候都更加愿意选择大运存大存储的手机。主要因素是更大运存更大存储就意味着手机同时运行多个程序更加流畅,存储空间使用起来更为充裕,不用再为了鸿蒙和安卓终有三战文财经天下周刊郑亚红唐煜编辑赵艳秋华为鸿蒙,终于来了。6月2日晚8时,华为正式发布HarmonyOS2及多款搭载该系统的新产品。正如此前预料的那样,该系统也将正式搭载到数以亿计的手华为何刚MatePadPro12。6打开平板天花板6月2日,华为举办HarmonyOS2及华为全场景新品发布会,正式发布首款运行HarmonyOS的平板电脑华为MatePadPro,标志着华为平板开启新的时代。华为志在通过Harm