【SpringCloud-10】SCA-nacos

前言:

前面介绍的springcloud,可以看做第一代,称为:SCN(spring cloud Netflix); 接下来介绍的是第二代:SCA(spring cloud alibaba); SCA主要有以下组件:

Nacos:服务注册中心 + 配置中心 (第一代中的 eureka和config)

Sentinel:服务熔断、限流(第一代中的hystrix)

Dubbo RPC/LB: 服务调用(第一代中的feign)

另外,还有一个分布式事务的解决方案:Seata (放到后面的数据库中介绍)

这一章,主要介绍nacos的使用。 

Nacos:

Nacos = Eureka + Config + Bus,在官网下载启动即可,不需要像eureka要自己搭建。

功能特性:

  • 服务发现与健康检查
  • 动态配置管理
  • 动态DNS服务
  • 服务和元数据管理(管理平台的⻆度,nacos也有⼀个ui⻚⾯,可以看到注册的服务及其实例信息(元数据信息)等),动态的服务权重调整、动态服务优雅下线

 下载地址:https://github.com/alibaba/Nacos

启动:linux/mac:sh startup.sh -m standalone

访问:ip:8848/nacos/#/login  (默认账号密码都是nacos)

【SpringCloud-10】SCA-nacos_第1张图片

一:服务注册中心 :

基本使用:

在项目中引入依赖:

pom中:


             
                com.alibaba.cloud
                spring-cloud-alibaba-dependencies
                2.1.0.RELEASE
                pom
                import
            

微服务中使其成为nacos的客户端:


        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-discovery
        


yml配置nacos格式:

spring:
  application:
    name: lagou-service-autodeliver
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动之后,就可以在后台看见注册的服务了:

【SpringCloud-10】SCA-nacos_第2张图片

 【SpringCloud-10】SCA-nacos_第3张图片

保护阈值:可以设置为 0-1 之间的浮点数,它其实是⼀个⽐例值(当前服务健康实例数/ 当前服务总实例数)。 当阈值被触发时(状态为true),会把所有实例(包括不健康的)都提供出去,防止雪崩。

负载均衡:

Nacos客户端引⼊的时候,会关联引⼊Ribbon的依赖包。 就像使⽤OpenFiegn的时

候也会引⼊ Ribbon 的依赖, Ribbon 包括 Hystrix 都按原来⽅式进⾏配置即可。

领域模型:

Namespace命名空间、Group分组、集群这些都是为了进⾏归类管理,进行隔离。

  • Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境、测试环境和⽣产环境
  • Group:分组,将若⼲个服务归为⼀组,比如一个项目下的所有服务。
  • Service:某⼀个服务,⽐如用户中心。
  • DataId:服务中的具体配置文件。

数据持久化:

默认使⽤嵌⼊式数据库进⾏数据存储,⽀持改为外部Mysql存储。

  • 新建数据库 nacos_confifig,数据库初始化脚本⽂件 ${nacoshome}/conf/nacos-mysql.sql
  • 修改${nacoshome}/conf/application.properties,增加Mysql数据源配置
 
spring.datasource.platform = mysql
### Count of DB:
db.num = 1
### Connect URL of DB:
db.url.0 = jdbc : mysql : //127.0.0.1 : 3306/nacos_config?
characterEncoding = utf8&connectTimeout = 1000&socketTimeout = 3000&au
toReconnect = true
db.user = root
db.password = 123456

二:服务配置中心:

之前使用config + bus,现在只需在nacos server端配置即可。

1、在server端新建配置:

【SpringCloud-10】SCA-nacos_第4张图片

2、微服务添加依赖,使其成为Nacos Config Client,能够从Nacos Server中获取到配置信息


        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

3、如何锁定 Nacos Server 中的配置⽂件(dataId):

通过 Namespace + Group + dataId 来锁定配置⽂件, Namespace 不指定就默认public, Group 不指定就默认 DEFAULT_GROUP。

dataId 的完整格式: ${prefix} - ${spring.profile.active} . ${file-extension},:
prefix:默认为spring.application.name的值,也就是项目名。 也可以通过cloud的prefix属性配置。
spring.profile.active:如dev,test
file-extension:yml或properties
cloud:
    nacos:
      discovery:
        # 集群中各节点信息都配置在这里(域名-VIP-绑定映射到各个实例的地址信息)
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

      # nacos config 配置
      config:
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
        # 锁定server端的配置文件(读取它的配置项)
        namespace: 07137f0a-bf66-424b-b910-20ece612395a  # 命名空间id
        group: DEFAULT_GROUP  # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
        file-extension: yaml   #默认properties

4、开启注解:@RefreshScope

【SpringCloud-10】SCA-nacos_第5张图片

5、扩展多个dataId:

假如nacos中不只一个yml配置文件,那就需要进行扩展配置了。使用ext-config属性:

  cloud:
    nacos:
      discovery:
        # 集群中各节点信息都配置在这里(域名-VIP-绑定映射到各个实例的地址信息)
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850

      # nacos config 配置
      config:
        server-addr: 127.0.0.1:8848,127.0.0.1:8849,127.0.0.1:8850
        # 锁定server端的配置文件(读取它的配置项)
        namespace: 07137f0a-bf66-424b-b910-20ece612395a  # 命名空间id
        group: DEFAULT_GROUP  # 默认分组就是DEFAULT_GROUP,如果使用默认分组可以不配置
        file-extension: yaml   #默认properties
        # 根据规则拼接出来的dataId效果:lagou-service-resume.yaml
        ext-config[0]:
          data-id: abc.yaml
          group: DEFAULT_GROUP
          refresh: true  #开启扩展dataId的动态刷新
        ext-config[1]:
          data-id: def.yaml
          group: DEFAULT_GROUP
          refresh: true  #开启扩展dataId的动态刷新

如果多个yml中有相同的配置,dataId的优先级为:默认>扩展的(扩展:ext-config[n], n越大优先级越高)

你可能感兴趣的:(spring,cloud)