到这里,功能上我们已经全实现了。

但是有时候我们的项目不是部署在一台机器上的,而是一个集群环境,往往我们的定时任务只需要一台机器执行就够了。

那么我们怎么样来实现这种集群环境下的定时任务运行呢?

前面说的支持幂等性可以在一定程序上解决这个问题,网上有版本使用数据库加锁的方式也可以,当然,还可以借助zookeeper等方式来实现更强大的分布式锁。

我在这里主要说的方式并不直接涉及到这个集群的问题,而是讨论这个定时任务运行的架构该如何来搭建,当然集群问题将自然而然得到解决。

在我的思维中,定时任务的架构应该是这样子的,见下图:

有一个集中管理的定时任务中心,所有的定时任务信息都在这里创建、保存并被运行,但是没有具体的业务,所有的业务都在具体的项目中,这样它的资源是非常省的。

当定时任务到了运行的时间,它的职责就是连接消息中心,通过消息中心向外发布一个的消息,可以带上运行的任务信息等参数,至于谁来消费这个消息执行业务它就不关心了。

当项目有定时任务的需求时,只需关注它本身的业务逻辑而不必去写定时任务的代码,只需要向消息中心订阅相应的消息,在接收到消息后执行业务代码即可。

这样定时任务和具体的项目基本就解耦了,当有新项目加入进来时只需要订阅一个消息就能实现定时任务。

在集群环境下,可以根据需要(一台或多台执行)设置消息的消费模式,像metaQ就支持集群中的某一台消费消息,当然,稳妥起见前面说的幂等性还是必不可少的。

这样上面说的问题是不是也得到解决了呢?

当然,具体场景还得具体分析,只有适合的才是最好的。如果项目只要二三台机器就能搞定,显然这个方案是得不尝失的

如果你有更好的想法或者方案,欢迎加QQ群进行交流探讨:466355109!

Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨相关推荐

  1. Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题

    之前已经把功能基本都实现了,这里我们再来优化一下代码. 我们发现,在创建.修改.和删除定时任务时,对于quartz的操作其实是可以封装成一个简单的工具辅助类的,如创建的代码可以抽取成: /** * 创 ...

  2. 集群分布式quartz的需要的表

    集群分布式quartz的需要的表 集群分布式quartz一共需要的11张表 select * from QRTZ_FIRED_TRIGGERS; select * from QRTZ_PAUSED_T ...

  3. Spring整合Quartz集群部署

    Spring整合Quartz集群部署 Quartz的分布式模式 数据表创建 quartz.properties spring-job.xml Quartz的分布式模式 集群中的每个节点都是一个独立的Q ...

  4. java跑批任务_【spring配置】——spring整合Quartz定时器

    第一种:为普通java类中的某个方法配置跑批任务MethodInvokingJobDetailFactoryBean CronTriggerBean SchedulerFactoryBean 1.定义 ...

  5. spring整合quartz框架

    前言: 在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量.那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了. quar ...

  6. quartz集群分布式(并发)部署解决方案-Spring

    项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...

  7. 使用Spring整合Quartz轻松完成定时任务

    一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...

  8. Spring 整合 Quartz 分布式调度

    转载自 Spring 整合 Quartz 分布式调度 本文旨在对 Spring+Quartz 分布式调度有一个直观的了解,通过实际的使用来解决问题. 前言 为了保证应用的高可用和高并发性,一般都会部署 ...

  9. quartz集群分布式(并发)部署解决方案-Spring - 推酷

    quartz集群分布式(并发)部署解决方案-Spring - 推酷 quartz集群分布式(并发)部署解决方案-Spring - 推酷 posted on 2015-09-05 16:03 lexus ...

最新文章

  1. java 导出文件,导出多个文件方案~
  2. MyEclipse优化---编程时更流畅
  3. java实现请求发送_java实现响应重定向发送post请求操作示例
  4. 富士相机设置传原图_双面屏设计!富士XPro3相机外观草图曝光
  5. mongodb索引--1亿条记录的查询从55.7秒到毫秒级别补充版
  6. 实现dmx512_LED灯具DMX512信号与普通TTL信号区别
  7. IETF:名词历史简介互联网精神的典范
  8. django mysql 游标,MySQL Cursor 存储过程之游标与相关循环
  9. 自动化运维工具Ansible实战(四)常用模块
  10. ISO20000带来什么?
  11. 【转载】关于二叉树、四叉树和八叉树 - Chinamming的专栏 - 博客频道 - CSDN.NET
  12. Qt 中使用全局变量的方法
  13. 2020-11-26
  14. Garbled Circuits介绍 - 4 混淆电路的优化
  15. Android控件之Button
  16. HDU1556--涂气球
  17. 计算机专业设计(论文)内容及要求,简述计算机专业毕业论文的撰写要求
  18. 页面里的在线实时聊天实现
  19. 变分原理(Variational Principle)
  20. Echache整合Spring缓存实例讲解(转)

热门文章

  1. 公钥、私钥、数字签名和数字证书的概念及解密
  2. 动态网站Web开发用什么语言好?PHP、ASP还是ASP.NET
  3. c语言 syn扫描,syn flooder*** (C语言)
  4. poj(2406) kmp
  5. 约瑟夫问题(vector的使用)
  6. apache的poi中设置Excel的单元格样式(HSSFCellStyle)和表格(HSSFSheet)
  7. 凯歌Java百家号_centos7下静默安装oracle11G图解配置 1
  8. networkx中求解平均度_CFD理论|Reynolds平均法(RANS)
  9. hadoop-KMS密钥管理服务配置使用
  10. java泛型与c 泛型,Java泛型代码编译与javac,失败与Eclipse Helios