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

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

2个回答

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

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

xicangtian
水桶妖L小蛮妖 回复孤单胖南瓜_: 谢了
大约 4 年之前 回复
u010317202
孤单胖南瓜_ 回复水桶妖L小蛮妖: 这的确是一个在开发中会遇到的实用的问题,如果还能实现动态切换那就更好了(当然使用zookeeper很容易做到)。 如果想要做到动态切换,那就只能使用zookeeper了
大约 4 年之前 回复
xicangtian
水桶妖L小蛮妖 大概明白你第二点的建议,你的意思是说引用启动后,单独发送一个启动定时器任务的请求,用负载均衡的方式发送到其中一台,是吧?可是这样有个问题啊!如果启动定时器任务的服务器挂了。再想启动定时器任务,不是要重新启动应用,这样负载均衡不是没有太大意义了
大约 4 年之前 回复
xicangtian
水桶妖L小蛮妖 等应用启起来之后,向负载均衡发送一个启动quartz http请求, 负载会把这个请求发送到其中一个主机。
大约 4 年之前 回复
xicangtian
水桶妖L小蛮妖 等应用启起来之后,向负载均衡发送一个启动quartz http请求, 负载会把这个请求发送到其中一个主机。
大约 4 年之前 回复

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐