# 微服务主从切换自定义starter **Repository Path**: dhpphd124/master-slave-switch ## Basic Information - **Project Name**: 微服务主从切换自定义starter - **Description**: 微服务主从切换的自定义starter - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-10-11 - **Last Updated**: 2022-08-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 微服务主从切换自定义starter #### 介绍 领导之前来了个需求,就是在微服务集群中,如果一个微服务(主机)死掉了,那么它的从机就要顶替它干活,保证业务的高可用性。 简而言之,就是实现微服务的主从切换。 我基于nacos和redis(之所以使用他们是因为现在大部分项目都会用到,所以几乎不会额外引入环境依赖),自定义了一个spring-boot-starter,实现了轻量级的主从切换。 #### 外部依赖 redis6.0(仅仅用来实现简易版的从机的选举)、nacos2.0.3(用来实现微服务的状态监控)。 #### 实现思路 1. nacos会定时对服务进行监控,如果15秒未发心跳,则视为服务不健康;如果30秒未发心跳,则视为服务下线。我们可以基于nacos扩展,对微服务下线进行监控(并且nacos官方也提供了服务监控的sdk,不了解的可以先熟悉下)。 2. 从机的顶替有一个选举过程,我这里基于redis的setnx命令,让他们去抢,谁抢到了,那么谁就顶替主机进行工作 (注意:用redis的话,一定要避免死锁的情况发生,所以设置的key一定要有时限性,而setnx和expire是不具有原子性的,所以我这里使用了lua脚本来保证原子性) ![输入图片说明](https://images.gitee.com/uploads/images/2021/1011/183903_a47d464c_7851604.png "屏幕截图.png") #### 项目结构 Test为主项目(引入了scada-spring-boot-starter模块)