SpringCloud Alibaba - Nacos Discovery 服务注册

SpringCloud所能使用的服务注册中心有很多种,而EurekaConsul的使用份额占一大部分,随着Eureka2.x版本的开源流产,Nacos Discovery脱颖而出,主要用于服务的发现、注册、调用等,通过nacos-server来进行存储服务的实例信息,由Nacos DiscoveryNacos Server的心跳来自动检测Service Instance的健康度。

角色担任

Nacos Server

需要在本地安装Nacos Server才能完成本章的内容讲解,具体的安装步骤访问Nacos 官方文档

创建应用

我们通过Idea开发工具创建一个SpringBoot项目,添加SpringCloudSpringCloud Alibaba相关的依赖,pom.xml如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-cloud-alibaba.version>0.2.1.RELEASE</spring-cloud-alibaba.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<!--SpringCloud-->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--SpringCloud Alibaba-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

我们本系列所使用的依赖为spring-cloud-starter-alibaba-nacos-discovery,版本是由spring-cloud-alibaba-dependencies进行维护,依赖添加完成,下面我们进行配置Nacos Discovery

application.yml

Nacos Config系列的文章内,我们都是把配置内容放到了bootstrap.yaml引导配置文件内,而Nacos Discovery的相关配置信息可以存放在bootstrap.yml也可以存放在application.yml内。
配置内容如下所示:

1
2
3
4
5
6
7
8
9
# service instance name
spring:
application:
name: hengboy-sca-nacos-discovery-provider
# nacos discovery config
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848

服务列表

配置完成后我们通过Application方式进行启动应用,启动完成后在控制台我们可以打印信息:

1
2019-03-07 14:59:54.718  INFO 32192 --- [           main] o.s.c.a.n.registry.NacosServiceRegistry  : nacos registry, hengboy-sca-nacos-discovery-provider 192.168.1.52:8080 register finished

Nacos Discovery 主动取消注册

当我们通过正常的关闭操作来结束应用服务的运行时,Nacos Discovery会通过NacosServiceRegistry类来完成服务的自动取消注册,取消注册方法源码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
public class NacosServiceRegistry implements ServiceRegistry<NacosRegistration> {
//...
/**
* 取消注册
*/
@Override
public void deregister(NacosRegistration registration) {

logger.info("De-registering from Nacos Server now...");

if (StringUtils.isEmpty(registration.getServiceId())) {
logger.info("No dom to de-register for nacos client...");
return;
}

NamingService namingService = registration.getNacosNamingService();
String serviceId = registration.getServiceId();

try {
namingService.deregisterInstance(serviceId, registration.getHost(),
registration.getPort(), registration.getCluster());
}
catch (Exception e) {
logger.error("ERR_NACOS_DEREGISTER, de-register failed...{},",
registration.toString(), e);
}

logger.info("De-registration finished.");
}
}

服务取消注册时,调用NamingService#deregisterInstance方法来完成,服务取消注册后在Nacos Console的服务列表会即时删除。

什么是正常关闭服务?

通俗的来讲,不是通过直接结束线程的方式都叫做正常关闭。

  • IDEA开发工具结束按钮
  • kill -15 pid

Nacos Server 自动剔除

当通过不正常的手段结束了服务进行后,比如:kill -9 pid,这时不会执行自动取消注册业务,这时Nacos Server该怎么进行剔除不健康的服务呢?

Nacos Server每隔10秒会执行一次检查服务健康工作,如果与服务的心跳无法通信,Nacos Server会先把该服务更新为不健康的服务,等待10秒后下次检查时,如果仍然无法通信则会自动剔除

代码示例

本章代码在源码的名称为:spring-cloud-alibaba-nacos-discovery-provider,在SpringCloud-Alibaba/Nacos-Discovery目录下。

  • MicroJob
    micro-job是一款分布式任务调度执行框架,用于集群环境负载均衡条件下的任务分发以及任务消费
    任务消费者节点定义任务 & 任务自动上报
    任务调度器自动根据负载均衡策略来选择不同的消费者节点进行任务消费

    点击查看MicroJob官方文档

下面的内容你感兴趣吗?

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×