2006-12-27
应该如何正确使用Quartz
关键字: quartz job
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
那么应该如何正确的使用quartz的同时,又不影响web容器自身的线程调度呢?
办法就是自己单独启动一个Job Server,来quartz跑job,不要部署在web容器中。
其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
其实想改造当前已经集成quartz的web应用也不算困难:
例如可以使用数据库的表来记录和维护任务队列和状态,把quartz部分完全从web应用中剥离出去,自己写一个Java Main程序把配置quartz的spring容器跑起来,这样Job Server就启动了(注意这个Job Server完全脱离tomcat)。此外这个Main程序应该再启动一个子线程,定期扫描数据库的任务队列表:
有新的任务就加入quartz的任务调度;
把当前任务的执行状态写入任务表;
看到删除任务的表字段状态以后,删除相应的任务。
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
那么应该如何正确的使用quartz的同时,又不影响web容器自身的线程调度呢?
办法就是自己单独启动一个Job Server,来quartz跑job,不要部署在web容器中。
其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
其实想改造当前已经集成quartz的web应用也不算困难:
例如可以使用数据库的表来记录和维护任务队列和状态,把quartz部分完全从web应用中剥离出去,自己写一个Java Main程序把配置quartz的spring容器跑起来,这样Job Server就启动了(注意这个Job Server完全脱离tomcat)。此外这个Main程序应该再启动一个子线程,定期扫描数据库的任务队列表:
有新的任务就加入quartz的任务调度;
把当前任务的执行状态写入任务表;
看到删除任务的表字段状态以后,删除相应的任务。
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
评论
skuser
2007-09-20
小弟也是最近才接触QUARTZ这个框架,但对几位的看法...不敢苟同
先不说各位的水平如何,此且看QUARTZ程序开发了几年
你们在这枉下这种结论是不是有点...
现在网上打着大师的旗号的大有人在,好像水平很高的样子,写了点的心得就往网上发;看到些好的框架就不管那三七二十一的写出来.出发点是好的.但是不要误人子弟啊,JAVA中的代码规范都不知道,还有按C语言的代码规范来冒充"JAVA大师":
方法()
{
方法体
}
你们这样的做法是不是想把自己往那些貌似大师的方向发展?
见怪不怪,感谢各位看完我这几句"费话",说实话...实在是看不下去了,才说了这么多!
先不说各位的水平如何,此且看QUARTZ程序开发了几年
你们在这枉下这种结论是不是有点...
现在网上打着大师的旗号的大有人在,好像水平很高的样子,写了点的心得就往网上发;看到些好的框架就不管那三七二十一的写出来.出发点是好的.但是不要误人子弟啊,JAVA中的代码规范都不知道,还有按C语言的代码规范来冒充"JAVA大师":
方法()
{
方法体
}
你们这样的做法是不是想把自己往那些貌似大师的方向发展?
见怪不怪,感谢各位看完我这几句"费话",说实话...实在是看不下去了,才说了这么多!
skuser
2007-09-20
哈哈哈哈,真好笑
jacklondon
2007-07-23
"像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉"?????
搞错了吧?Quartz 主要用在跑定时任务的,比如每天半夜运行的统计报表,不需要 Web 触发, 哪来的servlet线程资源问题?
搞错了吧?Quartz 主要用在跑定时任务的,比如每天半夜运行的统计报表,不需要 Web 触发, 哪来的servlet线程资源问题?
YuanYang
2007-07-17
另外,一般定时任务都是业务流程的一部分,如果把定时任务和web应用分开,需要处理并发(分布并发)会增加代码的复杂程度。
YuanYang
2007-07-17
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。
有些不明白,能详细说说?
如果把Application Server看成一个空间,servlet和quartz是同一份内存下、平等的两个线程,这么会相互影响?
我想只要不是在Action(servlet)里面初始化quartz应该没有问题吧?
有些不明白,能详细说说?
如果把Application Server看成一个空间,servlet和quartz是同一份内存下、平等的两个线程,这么会相互影响?
我想只要不是在Action(servlet)里面初始化quartz应该没有问题吧?
wdmsyf
2007-05-22
我的做法跟Robbin的看法一致,握个手先
ivan
2007-04-21
tuwen
2007-04-03
引用
另外还可以单独做一个job管理界面,可以通过web界面手工添加任务,查看任务状态,删除任务等等。
请问这个怎么实现呢,有没有demo代码,有开源程序支持吗?
bitlong
2007-02-20
如果Job内部的缓存和WEB容器内都是使用了缓存那应该怎么处理,在搭建一个第三方独立进程的缓存?对于一个小的应用来说是不是开销太大了。这个进程间的低耦合带来的可能是系统的更加不稳定。因为增加了很多故障点
Hejrcc
2007-02-14
引用
quartz还有一个问题就是不支持cluster。
我没有实际使用过cluster.
不过quartz官方网站上面有段话, 不知道是不是说quartz支持cluster呢?
引用
Runtime Environments
...
Quartz can be instantiated as a cluster of stand-alone programs (with load-balance and fail-over capabilities)
...
Quartz can be instantiated as a cluster of stand-alone programs (with load-balance and fail-over capabilities)
from: http://www.opensymphony.com/quartz/wikidocs/Features.html
Hejrcc
2007-02-14
引用
quartz还有一个问题就是不支持cluster。
我没有实际使用过cluster.
不过quartz上面有段话, 不知道是不是说支持 quartz还有一个问题就是不支持cluster。 呢?
Runtime Environments
...
Quartz can be instantiated as a cluster of stand-alone programs (with load-balance and fail-over capabilities)
SteveGY
2007-02-01
如果只是定期的Job,Robbin提的方法还是比crontab+batch复杂的,但如果是异步执行任务,又没有JMS支持,例如系统只有tomcat,则这样的做法没有JMS可靠又比message driven bean复杂,而且cluster的话,总是有问题的。有时候,有一些看似基本的功能,在web这样的环境中执行起来,异步执行后台操作的用户体验会比较好一些,例如,在接受用户postback数据后,处理数据库操作,又发出邮件这样的行为,往往是把发邮件这样的动作配置为异步执行会使用户页面的响应变快。
所以,我设计比较大容量的系统时,一般不考虑仅使用tomcat的,message queue server是必须的,有没有其他的EJB支持倒不重要,JMS几乎一定会用到。
异步发邮件这种事情,在NT的CDONTS上,天生是支持异步的(通过NT SMTP服务),所以ASP系统处理这类问题都没有性能问题,javamail没有这个优势,麻烦啊。
所以,我设计比较大容量的系统时,一般不考虑仅使用tomcat的,message queue server是必须的,有没有其他的EJB支持倒不重要,JMS几乎一定会用到。
异步发邮件这种事情,在NT的CDONTS上,天生是支持异步的(通过NT SMTP服务),所以ASP系统处理这类问题都没有性能问题,javamail没有这个优势,麻烦啊。
ppeter
2007-01-24
偶没看过官方wiki,也没做过整合quartz的cluster,但我觉得
robbin提出的设计方案,看似增加了工作,但带来的结果是系统的灵活性更好,同时也可以处理好web容器线程安全问题,Quartz这块完全可以抽象成独立的模块,这样设计似乎也更符合oo思想吧.
robbin提出的设计方案,看似增加了工作,但带来的结果是系统的灵活性更好,同时也可以处理好web容器线程安全问题,Quartz这块完全可以抽象成独立的模块,这样设计似乎也更符合oo思想吧.
dohc
2007-01-05
引用
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
引用
然后web应用去掉quartz部分配置,把原来的调用quartz任务的代码改写为读写数据库的任务表,这样就把job部分完全从web容器剥离掉了,甚至web容器做cluster也没有问题了,并且多个web节点在同时读写任务表的时候,还有数据库的事务来确保操作的一致性,实在是很棒。
可以集群的, 大家要把全文看清楚.
可以参考官方wiki:
http://wiki.opensymphony.com/display/QRTZ1/ConfigJDBCJobStoreClustering
melin
2007-01-03
引用
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
这是诋毁大师的作品。我已经在至少三个地方看见你这样说了,你现在也算是软件行业的“公众人物了”,你的言行会对他人有不小的误导。罪过!罪过!罪过!
laojiang
2006-12-30
前台和后台分开部署,程序分开写,前台一般不需要Quartz,后台管理用Quartz,后台管理的人比较少,应该不需要集群。
mingisme
2006-12-29
引用
使用crontab更简单一些,也不容易出问题
不知是否指的是Linux或Unix的Crontab,是的话,调用方式应该是启动n个main函数,每个main函数都启动一个Spring容器,然后里面调用Quartz,似乎更烦.
imcaptor
2006-12-28
使用crontab更简单一些,也不容易出问题
sim114
2006-12-27
引用
对于Web容器来说,最忌讳应用程序私自启动线程,自行进行线程调度,像Quartz这种在web容器内部默认就自己启动了10个线程进行异步job调度的框架本身就是很危险的事情,很容易造成servlet线程资源回收不掉,所以我一向排斥使用quartz。
开几个线程是管理的问题
引用
quartz还有一个问题就是不支持cluster。导致使用quartz的应用都没有办法做群集。
其他web节点当需要启动异步任务的时候,可以通过种种方式(DB, JMS, Web Service, etc)通知Job Server,而Job Server收到这个通知之后,把异步任务加载到自己的任务队列中去。
我不知道有什么问题是在web容器内启动,而不支持cluster,既然你已经使用了以上方式同步各个节点。也许你能给我一个示例?
我也认同:另开一个桌面应用,复杂度加大了很多.特别是对服务器管理方面,多一事不如少一事
一个类似的例子是 直接在启动类里新开一个端口, 运行一个服务器程序
我觉得真正的问题是 需要异步操作的通常都是运行时间长,比较耗费资源,放在web容器可能容易使web容器崩溃,这倒是一个需要斟酌的地方
kingsword
2006-12-27
我在javaeye刚注册了一个用户,可是一直没收到邮件,怎么回事啊?
发表评论
- 浏览: 1930820 次
- 性别:

- 来自: 上海

- 详细资料
搜索本博客
我的相册
iphone2.jpg
共 39 张
共 39 张
最近加入圈子
链接
最新评论
-
中国行业应用软件领域恶性 ...
比较同意,世界就这样
-- by smilerain -
发现JBoss Seam很棒呀!有 ...
JSF\Struts等这些框架主要是看用在做什么样的项目上.各有优缺点.因为他们 ...
-- by iamlibo -
中国行业应用软件领域恶性 ...
深有同感,心有戚戚焉,这确实是一个博傻的行业。Robbin一语中的,写得很有深度 ...
-- by slattn -
社区网站SNS化的思考 – ...
就算51.com和腾讯流量再大,我也不感兴趣豆瓣在心中的地位要比那些乱糟糟的社区 ...
-- by xifanlou -
发现JBoss Seam很棒呀!有 ...
也不说用过jsf有多深入,给我的感觉还是作的太复杂,有点因为技术而技术的感觉。这 ...
-- by nimrob






评论排行榜