负载均衡环境中的 Spring 调度程序
我在负载平衡环境中有多个quartz cron 作业。目前这些作业在每个节点上运行,这是不可取的。我希望一个节点仅运行特定的调度程序,如果该节点崩溃,另一个节点应该运行针对崩溃节点的调度程序。 如何使用 spring 2.5.6/tomcat 负载均衡器来完成此操作。
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.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我觉得这个问题有几个方面。
首先,Quartz 具有用于暂停和恢复调度程序的 API 方法,甚至是单个触发器和作业,
例如
http://www.jarvana.com/jarvana/view/opensymphony/quartz/1.6.1/quartz-1.6.1-javadoc.jar!/org/quartz/Scheduler.html#standby( )
我将创建一个引用 Quartz 调度程序或触发器的 spring bean,以及一个用于存储状态的简单 isMasterNode 布尔成员。然后,我将公开 2 个 [限制访问] Web 服务调用:makeMaster 和 makeSlave,它们将分别调用 Scheduler.resume() 或待机/暂停。
最后,最大的问题是如何&根据您确定的另一个节点已“崩溃”。
如果您使用硬件负载平衡器来管理此操作,则可以将其配置为在新的“主”节点上调用“makeMaster”WS,该节点又调用 Scheduler.resume() 或类似的方法。
哈
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