Spring Boot 如何实现程序的主热备功能?

目前项目有一个需求,就是程序实现双机热备。
客户方已购买了双机热备软件,但是软件只能实现热备。
但是程序内部有许多的定时任务,都是操作数据库内的,和对第三方的TCP进行通讯的。

如果两台服务器都同时启动的情况下定时任务等会同时执行,但是实际只需要一台对外开放服务及数据处理。

目前有一个思路就是能不能暂停spring boot的启动,当程序判断到主机的IP被双机热备软件切换到该服务器时才启动该服务器的spring boot 服务。
但是没有找到一个合适的实现方式。

1个回答

//说一下我的想法
1.主服务器上spring  boot正常启动
2.备用服务上新建一个心跳客户端,用socket也好,用别的方式都行,和主服务器上的服务发送心跳包,例如每隔10秒发送一次
如果心跳包没有收到,或者连接异常,就ping一下主服务器是否宕机,这种情况就在心跳客户端上用java cmd启动备用spring boot服务,此时备用服务器就变成主服务了
然后运维人员就赶紧去维护宕机的那台服务器,等维护成功就在这台服务器上启动心跳客户端,然后往新的主服务器上发送心跳包,以此类推

liu_jinping_
Jimbo_liu 最后用的Spring Boot 启动的监听事件,实现ApplicationListener<ApplicationContextInitializedEvent> ,做一个递归方法,定时5秒去telnet主机端口是否在线,如果不在线的情况下,就跳出方法,继续向下执行,Spring 容器才正常启动。不用增加一个独立的客户端
7 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问