Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨
到这里,功能上我们已经全实现了。
但是有时候我们的项目不是部署在一台机器上的,而是一个集群环境,往往我们的定时任务只需要一台机器执行就够了。
那么我们怎么样来实现这种集群环境下的定时任务运行呢?
前面说的支持幂等性可以在一定程序上解决这个问题,网上有版本使用数据库加锁的方式也可以,当然,还可以借助zookeeper等方式来实现更强大的分布式锁。
我在这里主要说的方式并不直接涉及到这个集群的问题,而是讨论这个定时任务运行的架构该如何来搭建,当然集群问题将自然而然得到解决。
在我的思维中,定时任务的架构应该是这样子的,见下图:
有一个集中管理的定时任务中心,所有的定时任务信息都在这里创建、保存并被运行,但是没有具体的业务,所有的业务都在具体的项目中,这样它的资源是非常省的。
当定时任务到了运行的时间,它的职责就是连接消息中心,通过消息中心向外发布一个的消息,可以带上运行的任务信息等参数,至于谁来消费这个消息执行业务它就不关心了。
当项目有定时任务的需求时,只需关注它本身的业务逻辑而不必去写定时任务的代码,只需要向消息中心订阅相应的消息,在接收到消息后执行业务代码即可。
这样定时任务和具体的项目基本就解耦了,当有新项目加入进来时只需要订阅一个消息就能实现定时任务。
在集群环境下,可以根据需要(一台或多台执行)设置消息的消费模式,像metaQ就支持集群中的某一台消费消息,当然,稳妥起见前面说的幂等性还是必不可少的。
这样上面说的问题是不是也得到解决了呢?
当然,具体场景还得具体分析,只有适合的才是最好的。如果项目只要二三台机器就能搞定,显然这个方案是得不尝失的
如果你有更好的想法或者方案,欢迎加QQ群进行交流探讨:466355109!
Spring 整合Quartz 2实现定时任务五:集群、分布式架构实现探讨相关推荐
- Spring 整合Quartz 2实现定时任务四:细化调整及一些已知的问题
之前已经把功能基本都实现了,这里我们再来优化一下代码. 我们发现,在创建.修改.和删除定时任务时,对于quartz的操作其实是可以封装成一个简单的工具辅助类的,如创建的代码可以抽取成: /** * 创 ...
- 集群分布式quartz的需要的表
集群分布式quartz的需要的表 集群分布式quartz一共需要的11张表 select * from QRTZ_FIRED_TRIGGERS; select * from QRTZ_PAUSED_T ...
- Spring整合Quartz集群部署
Spring整合Quartz集群部署 Quartz的分布式模式 数据表创建 quartz.properties spring-job.xml Quartz的分布式模式 集群中的每个节点都是一个独立的Q ...
- java跑批任务_【spring配置】——spring整合Quartz定时器
第一种:为普通java类中的某个方法配置跑批任务MethodInvokingJobDetailFactoryBean CronTriggerBean SchedulerFactoryBean 1.定义 ...
- spring整合quartz框架
前言: 在一些项目中,往往需要定时的去执行一些任务,比如商城项目,每天0点去统计前一天的销量.那么如何实现呢,总不可能我们每天0点手动的去执行统计销量的方法吧,这时就quartz就起作用了. quar ...
- quartz集群分布式(并发)部署解决方案-Spring
项目中使用分布式并发部署定时任务,多台跨JVM,按照常理逻辑每个JVM的定时任务会各自运行,这样就会存在问题,多台分布式JVM机器的应用服务同时干活,一个是加重服务负担,另外一个是存在严重的逻辑问题, ...
- 使用Spring整合Quartz轻松完成定时任务
一.背景 上次我们介绍了如何使用Spring Task进行完成定时任务的编写,这次我们使用Spring整合Quartz的方式来再一次实现定时任务的开发,以下奉上开发步骤及注意事项等. 二.开发环境及必 ...
- Spring 整合 Quartz 分布式调度
转载自 Spring 整合 Quartz 分布式调度 本文旨在对 Spring+Quartz 分布式调度有一个直观的了解,通过实际的使用来解决问题. 前言 为了保证应用的高可用和高并发性,一般都会部署 ...
- quartz集群分布式(并发)部署解决方案-Spring - 推酷
quartz集群分布式(并发)部署解决方案-Spring - 推酷 quartz集群分布式(并发)部署解决方案-Spring - 推酷 posted on 2015-09-05 16:03 lexus ...
最新文章
- java 导出文件,导出多个文件方案~
- MyEclipse优化---编程时更流畅
- java实现请求发送_java实现响应重定向发送post请求操作示例
- 富士相机设置传原图_双面屏设计!富士XPro3相机外观草图曝光
- mongodb索引--1亿条记录的查询从55.7秒到毫秒级别补充版
- 实现dmx512_LED灯具DMX512信号与普通TTL信号区别
- IETF:名词历史简介互联网精神的典范
- django mysql 游标,MySQL Cursor 存储过程之游标与相关循环
- 自动化运维工具Ansible实战(四)常用模块
- ISO20000带来什么?
- 【转载】关于二叉树、四叉树和八叉树 - Chinamming的专栏 - 博客频道 - CSDN.NET
- Qt 中使用全局变量的方法
- 2020-11-26
- Garbled Circuits介绍 - 4 混淆电路的优化
- Android控件之Button
- HDU1556--涂气球
- 计算机专业设计(论文)内容及要求,简述计算机专业毕业论文的撰写要求
- 页面里的在线实时聊天实现
- 变分原理(Variational Principle)
- Echache整合Spring缓存实例讲解(转)
热门文章
- 公钥、私钥、数字签名和数字证书的概念及解密
- 动态网站Web开发用什么语言好?PHP、ASP还是ASP.NET
- c语言 syn扫描,syn flooder*** (C语言)
- poj(2406) kmp
- 约瑟夫问题(vector的使用)
- apache的poi中设置Excel的单元格样式(HSSFCellStyle)和表格(HSSFSheet)
- 凯歌Java百家号_centos7下静默安装oracle11G图解配置 1
- networkx中求解平均度_CFD理论|Reynolds平均法(RANS)
- hadoop-KMS密钥管理服务配置使用
- java泛型与c 泛型,Java泛型代码编译与javac,失败与Eclipse Helios