大家好,我是烤鸭:
还有2天就过年了,祝大家新年快乐。最近好久没写技术文章了,还是得回归下主业,今天分享下nacos注册中心自动上下负载的方式和组件。
组件版本
<properties><java.version>1.8</java.version><springboot.version>2.2.6.RELEASE</springboot.version><springcloud.version>Hoxton.SR6</springcloud.version><springcloud-alibaba.version>2.2.1.RELEASE</springcloud-alibaba.version></properties>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>${springcloud.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${springcloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>
使用actuator自带的endpoint
如果用actuator的接口是可以直接下线的,无需多余开发,只需要引用包就行。
http方式:(支持eurka和nacos)
curl -XPOST http://localhost:8080/actuator/service-registry?status=DOWN -H "Content-Type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8"
原理是调用ServiceRegistryEndpoint的setStatus。
底层的调用方法:
nacosDiscoveryProperties.namingMaintainServiceInstance().updateInstance(serviceId, instance);
使用的话,最好还是加上actuator的鉴权。
自研负载组件(源码地址在下面)
有时候服务启动就注册到注册中心,但实际并没有准备好。
需要修改服务的自动注册属性,由插件注册(也可以在指定时机进行注册)
spring.cloud.nacos.discovery.register-enabled=false
插件里有两个endpoint
下线:(其中判断只能是localhost地址才能下线,只能下线本机)
// 调用的根源方法
nacosRegistration.getNacosNamingService().deregisterInstance(serviceName, groupName, ip, port, clusterName);
上线:(默认是项目启动时注册,可以自义定时机)
nacosRegistration.getNacosNamingService().registerInstance(serviceName, groupName, instance);
调用方式:(配合脚本使用更香)
#上线
curl -XPOST localhost:8080/actuator/graceful-refresh
#下线
curl -XPOST localhost:8080/actuator/graceful-pause
使用截图
服务注册成功:
请求下线接口:
脚本方式下线:
开源地址
https://gitee.com/fireduck_admin/nacos-ez-updown
总结
别总结了,快点下班,回家过年去了。