nacos注册中心自动上下负载

465 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

大家好,我是烤鸭:

 还有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

使用截图

服务注册成功:

在这里插入图片描述

在这里插入图片描述

请求下线接口:

在这里插入图片描述

脚本方式下线:

在这里插入图片描述

开源地址

gitee.com/fireduck_ad…

总结

别总结了,快点下班,回家过年去了。