quartz(6)--集群
Quartz应用能被集群,是水平集群还是垂直集群取决于你自己的需要。集群提供以下好处:
· 伸缩性
· 高可用性
· 负载均衡
目前,Quartz只能借助关系数据库和JDBC作业存储支持集群。
quartz集群架构
quartz的分布式架构如上图,可以看到数据库是各节点上调度器的枢纽.各个节点并不感知其他节点的存在,只是通过数据库来进行间接的沟通。
实际上,quartz的分布式策略就是一种以数据库作为边界资源的并发策略.每个节点都遵守相同的操作规范,使得对数据库的操作可以串行执行.而不同名称的调度器又可以互不影响的并行运行。
集群配置
通过设置"org.quartz.jobStore.isClustered"属性为"true"来激活集群特性。
在集群中的每一个实例都必须有一 个唯一的"instance id" ("org.quartz.scheduler.instanceId" 属性), 但是应该有相同的"scheduler instance name" ("org.quartz.scheduler.instanceName"),也就是说集群中的每一个实例都必须使用相同的 quartz.properties 配置文件。
# Configure JobStore org.quartz.jobStore.misfireThreshold = 60000 org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.useProperties = false org.quartz.jobStore.dataSource = rhinoDS org.quartz.jobStore.tablePrefix = QRTZ_ org.quartz.jobStore.isClustered = true org.quartz.jobStore.clusterCheckinInterval = 20000
锁机制
quartz通过数据库锁机制来实现集群,QRTZ_LOCKS就是Quartz集群实现同步机制的行锁表
表结构
表记录
关于行锁的机制:
1、mysql > SET autocommit=0; //先把mysql设置为不自动提交。
2、SELECT * FROM es_locks WHERE lock_name = 'TRIGGER_ACCESS' FOR UPDATE ; //线程一通过FOR UPDATE 可以把这行锁住
3、SELECT * FROM es_locks WHERE lock_name = 'TRIGGER_ACCESS' FOR UPDATE ; //线程二通过FOR UPDATE 无法获得锁,线程等待。
4、COMMIT; //线程一通过COMMIT 释放锁
5、 //线程二可以访问到数据,线程不再等待。
所以,通过这个机制,一次只能有一个线程来操作 加锁 - 操作 - 释放锁。 如果 操作 的时间过长的话,会带来集群间的主线程等待。
数据库行锁是一种悲观锁,锁表时其它线程无法查询。
CALENDAR_ACCESS
JOB_ACCESS
MISFIRE_ACCESS
STATE_ACCESS
TRIGGER_ACCESS
QRTZ_LOCKS中有5条记录,代表5把锁,分别用于实现多个Quartz Node对Job、TRIGGER、Calendar访问的同步控制。目前代码中行锁只用到了STATE_ACCESS 和TRIGGER_ACCESS 这两种。
转载于:https://www.cnblogs.com/qin-derella/p/6530661.html
quartz(6)--集群相关推荐
- quartz在集群环境下的最终解决方案
在集群环境下,大家会碰到一直困扰的问题,即多个 APP 下如何用 quartz 协调处理自动化 JOB . 大家想象一下,现在有 A , B , C3 台机器同时作为集群服务器对外统一提供 SERVI ...
- quartz分布式集群部署并且可视化配置job定时任务
2019独角兽企业重金招聘Python工程师标准>>> 项目使用quartz框架完成了定时任务集群部署调度,并且对quartz进一步封装完成在web界面可动态配置定时任务.定时任务如 ...
- SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群...
2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群 一 ...
- SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群... 1
SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群 - 一.大致介绍 1.因网友提到有没有采用注解式配置的Quartz例子,因此 ...
- Quartz的集群模式和单机模式共存-让一个非集群的Quartz与集群节点并行着运行
假如你让一个非集群的 Quartz 应用与集群节点并行着运行,设法使用 JobInitializationPlugin和 RAMJobStore Quartz支持可选节点执行job quartz集群, ...
- quartz集群调度机制调研及源码分析---转载
quartz2.2.1集群调度机制调研及源码分析 引言 quartz集群架构 调度器实例化 调度过程 触发器的获取 触发trigger: Job执行过程: 总结: 附: 引言 quratz是目前最为成 ...
- Spring+Quartz 集群
转载 http://soulshard.iteye.com/blog/337886 单独的Quartz集群在http://unmi.blogjava.net/有Unmi翻译的Quartz Job Sc ...
- 使用sqlserver搭建高可用双机热备的Quartz集群部署
一般拿 Timer 和 Quartz 相比较的,简直就是对 Quartz 的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于sqlserver,mysql的集 ...
- 使用sqlserver搭建高可用双机热备的Quartz集群部署【附源码】
一般拿Timer和Quartz相比较的,简直就是对Quartz的侮辱,两者的功能根本就不在一个层级上,如本篇介绍的Quartz强大的集群机制,可以采用基于 sqlserver,mysql的集群方案,当 ...
最新文章
- live555从RTSP服务器读取数据到使用接收到的数据流程分析
- ubuntu LAMP安装
- RabbitMQ核心概念
- SPOJ-New Distinct Substrings,注意会爆int
- 《暗时间》——总结+语录整理
- 小妙招:教你如何查询获取企业工商数据
- 计算机提示资源管理器停止,电脑开机黑屏并弹出Windows 资源管理器已停止工作该怎么办?...
- vue同一项目搭建PC端和移动端
- Mac计时器找不到怎么解决
- easyPR车牌识别分析与测试结果
- A股市场统计(营业收入增长率、净利润增长率及净利润比市值近十年的平均数、中位数)
- 公开数据集分享(一)-MMWHS
- 【C语言】N 阶矩阵的转置
- 新生宝宝奶粉喂养正确方法
- 如何在word中输入打对勾的小方框-☑
- Asp.net夜话之二:asp.net内置对象
- 从 NetFx3.cab 安装.net 3.5
- Babylon.js 拾取坐标的方法
- 《Armv8/armv9架构入门指南》-【第一章】- 前言
- 大数据分析整体技术流程及架构
热门文章
- java代码解锁华为_如何编写可怕的Java代码?
- 无线循环里面 string = “i”会内存溢出吗?_记一次公司JVM堆溢出抽茧剥丝定位的过程...
- oracle 计划名称,甲骨文修改合作伙伴计划 分为四个级别
- 【spring boot】支持webjars
- 【spring-session】 1.x与2.x 不兼容
- mysql命令:查看表结构
- 在html页面中加入矢量图,HTML页面插入SVG的多种方式
- 计算机函数的实验报告,excel函数实验报告.doc
- Centos7 释放内存
- mysql 编程处理数据类型_Mysql支持的数据类型(总结)