开发者

Spring schedulers in a load balanced environment

I have multiple quartz cron jobs in a load balanced environment. Currently these jobs are running on each node, which is not desirable. 开发者_如何转开发I want a node to run only a particular scheduler and if the node crashes, another node should run the scheduler intended for the node that crashed. How can this be done with spring 2.5.6/tomcat load balancer.


I think there's a few aspects to this question.

Firstly, Quartz has API methods for pausing and resuming the Scheduler, or even individual triggers and jobs

e.g. http://www.jarvana.com/jarvana/view/opensymphony/quartz/1.6.1/quartz-1.6.1-javadoc.jar!/org/quartz/Scheduler.html#standby()

I would create a spring bean with a reference to the Quartz scheduler or trigger, and a simple isMasterNode boolean member for storing state. I'd then expose 2 [restricted-access] web service calls: makeMaster and makeSlave, which will call Scheduler.resume() or standby/pause, respectively.

Finall, the big question is how & with what you determine that another node has 'crashed'.

If you're using a hardware loadbalancer to manage this, you could configure it to call the 'makeMaster' WS on the new 'primary' node, which in turn calls Scheduler.resume() or similar.

hth

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜