nacos注册中心架构

image.png

核心功能

服务注册:

支持异构的系统发送注册,心跳的接口接入nacos,注册到对应的ip, 端口等信息

服务心跳:

定时发送,判断是否可用,默认5s一次

服务同步:

集群模式下各个server会同步服务实例,保证信息的一致性,leader模式,raft协议

服务发现

服务消费端 ,调用服务提供的服务,会发送rest请求,获取服务列表,同时缓存本地。
同时client会本地开启定时任务拉取服务最新的注册表信息

服务健康检查

nacos server 会定时检查各个祖册服务实例的健康
15s没有心跳,会设置healthy =false
30s没心跳,会删除实例

注册表数据结构

image.png

Spring cloud alibaba nacos使用

Spring cloud alibaba的版本对应选型
image.png
推荐对应版本
image.png

搭建客户端nacos-client服务

父pom引入 Spring cloud Spring cloud alibaba

  1. <dependencyManagement>
  2. <dependencies>
  3. <!--引入springcloud的版本-->
  4. <dependency>
  5. <groupId>org.springframework.cloud</groupId>
  6. <artifactId>spring-cloud-dependencies</artifactId>
  7. <version>Hoxton.SR3</version>
  8. <type>pom</type>
  9. <scope>import</scope>
  10. </dependency>
  11. <dependency>
  12. <groupId>com.alibaba.cloud</groupId>
  13. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
  14. <version>2.2.1.RELEASE</version>
  15. <type>pom</type>
  16. <scope>import</scope>
  17. </dependency>
  18. </dependencies>
  19. </dependencyManagement>

当前pom

  1. <dependency>
  2. <groupId>com.alibaba.cloud</groupId>
  3. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  4. </dependency>

2) application.properties中配置

server.port=8002

微服务名称

spring.application.name=service-user

配置 Nacos server 的地址

spring.cloud.nacos.discovery.server‐addr=localhost:8848

其他配置:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

配置项 Key 默认值 说明
服务端地址 spring.cloud.nacos.discovery.server-addr Nacos Server 启动监听的ip地址和端口
服务名 spring.cloud.nacos.discovery.service ${spring.application.name} 给当前的服务命名
服务分组 spring.cloud.nacos.discovery.group DEFAULT_GROUP 设置服务所处的分组
权重 spring.cloud.nacos.discovery.weight 1 取值范围 1 到 100,数值越大,权重越大
网卡名 spring.cloud.nacos.discovery.network-interface 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册的IP地址 spring.cloud.nacos.discovery.ip 优先级最高
注册的端口 spring.cloud.nacos.discovery.port -1 默认情况下不用配置,会自动探测
命名空间 spring.cloud.nacos.discovery.namespace 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
AccessKey spring.cloud.nacos.discovery.access-key 当要上阿里云时,阿里云上面的一个云账号名
SecretKey spring.cloud.nacos.discovery.secret-key 当要上阿里云时,阿里云上面的一个云账号密码
Metadata spring.cloud.nacos.discovery.metadata 使用Map格式配置,用户可以根据自己的需要自定义一些和服务相关的元数据信息
日志文件名 spring.cloud.nacos.discovery.log-name
集群 spring.cloud.nacos.discovery.cluster-name DEFAULT 配置成Nacos集群名称
接入点 spring.cloud.nacos.discovery.enpoint UTF-8 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址
是否集成Ribbon ribbon.nacos.enabled true 一般都设置成true即可
是否开启Nacos Watch spring.cloud.nacos.discovery.watch.enabled true 可以设置成false来关闭 watch

使用:
注意:需要添加@LoadBalanced注解

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate() {
  4. return new RestTemplate();
  5. }

nacos源码编译

源码地址:
https://github.com/alibaba/nacos

编译

mvn -Prelease-nacos -Dmaven.test.skip=true -Drat.skip=true clean install -U

image.png
2)启动nacos
进入console模块,找到启动类 com.alibaba.nacos.Nacos,执行main方法

单机版需要修改配置

-Dnacos.standalone=true -Dnacos.home=D:\code\java_yuanma\nacos-1.4.1