xicangtian
水桶妖L小蛮妖
采纳率100%
2016-07-04 03:33 阅读 3.7k
已采纳

负载均衡下定时器任务怎么只执行一个,在不使用数据库的情况下

最近在做考核,经理问了一个如题目的问题,要求我不使用数据库,解决spring quartz定时器在负载均衡的环境下只运行行一个定时器任务。目前想到的方案,1、利用JAVA的输入输出,在数据库服务器上创建一个文件,用来控制由哪台服务器来运行定时器任务。2、直接利用数据库运行定时器任务,(这个有点顾虑就是担心并非所有的定时器任务都是执行对数据库的更新操作。本人菜鸟。)
希望来位大神帮忙解决一下,想很久了,没有想到别的办法。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    u010317202 孤单胖南瓜_ 2016-07-05 02:20

    你的这两个方案明显是不满足经理要求的,
    1、“创建一个文件”,既然是负载均衡应用肯定不在同一个主机上,难道你创建网络文件吗。当然你可以使用zookeeper,创建一个结点之类的。
    2、利用数据库运行定时器任务,你们经理都说了不使用数据库。
    给你出个主意但不知道行不行,等应用启起来之后,向负载均衡发送一个启动quartz http请求, 负载会把这个请求发送到其中一个主机。
    这样就基本达到你的要求了只执行一个,但是不知道是不是你们经理想要回答。

    这的确是一个在开发中会遇到的实用的问题,如果还能实现动态切换那就更好了(当然使用zookeeper很容易做到)。

    点赞 1 评论 复制链接分享
  • u010317202 孤单胖南瓜_ 2016-07-05 02:20

    要么就是使用配置的方式,把要启动的quartz 结点增加一个配置,但是这样就会造成配置不一致的情况,好处是quartz结点可以指定

    点赞 评论 复制链接分享

相关推荐