Nacos技术

说明:Nacos是微服务框架中的注册中心技术,可用于管理、协调微服务之间的请求,可配合Feign技术,搭建一个完整的微服务框架。

一、安装&启动

可在官网(https://nacos.io/zh-cn/)提供的下载链接(https://github.com/alibaba/nacos/releases)中下载,下载后解压到一个没有中文、没有数字的路径下。打开目录的bin文件夹,在此目录下打开CMD,输入startup.cmd -m standalone 命令,启动Nacos,这种方式为单机模式、非集群模式启动,直接双击startup.exe为集群模式。
在这里插入图片描述
出现下面界面,为启动成功

在这里插入图片描述

此时,可以打开浏览器,输入:http://localhost:8848/nacos/,进入nacos平台,首次登录需要账号密码,都是nacos。

在这里插入图片描述

二、使用

在用户服务(8081端口)、订单服务(8082端口)的pom.xml文件中,添加注册依赖

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
        dependency>

用户服务配置(application.yml)

server:
  port: 8081

# 1.数据源的配置
spring:
  # 1.1设置服务名称
  application:
    name: userservice

  # 1.2数据库配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_spring_cloud
    username: root
    password: 123456

  # 1.3配置Nacos注册中心地址
  cloud:
    nacos:
      discovery:
        # 服务地址
        server-add: localhost:8848


# 2.mybatis配置
mybatis:
  configuration:

    # 显示SQL日志配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    # 驼峰命名配置
    map-underscore-to-camel-case: true

  # 设置mapper.xml文件所在的路径
  mapper-locations: classpath:mapper/*.xml

订单服务配置(application.yml)

server:
  port: 8082

# 1.数据源的配置
spring:
  # 1.1设置服务名称
  application:
    name: orderservice

  # 1.2数据库配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_spring_cloud
    username: root
    password: 123456

  # 1.3配置Nacos注册中心地址
  cloud:
    nacos:
      discovery:
        # 服务地址
        server-add: localhost:8848


# 2.mybatis配置
mybatis:
  configuration:

    # 显示SQL日志配置
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

    # 驼峰命名配置
    map-underscore-to-camel-case: true

  # 设置mapper.xml文件所在的路径
  mapper-locations: classpath:mapper/*.xml

启动这两个服务,打开nacos平台,可以看到这两个服务

Nacos技术_第1张图片

(1)服务管理

在nacos服务器中,服务的结构如下图:
Nacos技术_第2张图片

需要知道以下三点:

(1)微服务是根据服务名称区分的,名称相同视为同一个服务;

(1)不同命名空间之间是不能通信的;

(2)在集群环境中,nacos的负载均衡策略,会优先分配同一个集群下的服务;

命名空间

在nacos平台上,可手动新建命名空间

Nacos技术_第3张图片

在程序中,配置文件中没有设置,默认会分配到public下,可通过下面的配置进行设置

spring:
  cloud:
    nacos:
      discovery:
        # 配置服务所在的命名空间
        namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934

需要注意的是,命名空间的值是nacos上命名空间随机生成的ID

Nacos技术_第4张图片

在程序中,通过下面的配置设置分组,不设置默认组名称为“DEFAULT_GROUP”;

spring:
  cloud:
    nacos:
      discovery:
        # 设置分组
        group: group1

集群

在程序中,通过下面的配置设置集群,不设置默认集群名称为“DEFAULT”;

spring:
  cloud:
    nacos:
      discovery:
        # 设置集群
        cluster-name: hz

配置效果

设置orderservice的命名空间,组,集群如下:

# 1.数据源的配置
spring:
  # 1.1设置服务名称
  application:
    name: orderservice

  # 1.2数据库配置
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/db_spring_cloud
    username: root
    password: 123456

  # 1.3配置Nacos注册中心地址
  cloud:
    nacos:
      discovery:
        # 服务地址
        server-add: localhost:8848

        # 配置服务所在的命名空间
        namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934

        # 设置分组
        group: group2

        # 设置集群
        cluster-name: hz

nacos平台

Nacos技术_第5张图片


(不同命名空间之间不能通信)

Nacos技术_第6张图片

(Load balancer does not have available server for client: userservice)

Nacos技术_第7张图片

(2)配置管理

当微服务的数量非常多时,配置和维护服务的配置文件是一件工作量巨大的事情。可以使用nacos的配置中心,将本地相同的配置信息,写在nacos上(称为云端配置)。之后微服务需要使用直接关联就可以了,同样,需要修改时也只需要修改云端上的配置。

分类

云端配置分为如下四类:

  • 带环境名称的配置,如orderservice-dev.yaml,表示开发环境下的订单服务配置;

  • 不带环境名称的配置,如orderservice.yaml,表示订单服务配置;

  • 扩展配置,如extend.yaml,表示扩展的配置,不特指为某一个服务的扩展;

  • 共享配置,如logconfig.yaml,表示所有微服都可能使用到的配置;

配置

可在nacos平台上的,配置管理中添加配置,需要注意服务所在的命名空间

Nacos技术_第8张图片

创建四种类型的配置

Nacos技术_第9张图片

使用

在需要加载云端配置的服务中,添加nacos配置中心依赖

        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
        dependency>

创建bootstrap.yml文件,这个文件会在程序读取application.yml配置文件之前读取,是application.yml的前置文件,可以将关联nacos上的配置文件内容写在这里。
Nacos技术_第10张图片

bootstrap.yml文件内容,可以根据实际需要设置

# bootstrap.yml
spring:
  cloud:
    nacos:
      discovery:
        config:
          server-addr: localhost:8848
          namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934
          group: group2
          # 不带环境的配置
          file-extension: yaml
          refresh-enabled: true

          # 扩展配置(可配置多个)
          extension-configs:
            - data-id: extend1.yaml
              group: DEFAULT_GROUP
              refresh: true

            - data-id: extend2.yaml
              group: DEFAULT_GROUP
              refresh: true

          # 共享配置(可配置多个)
          shared-configs:
            - data-id: logconfig1.yaml
              group: DEFAULT_GROUP
              refresh: true

            - data-id: logconfig2.yaml
              group: DEFAULT_GROUP
              refresh: true


  # 激活带环境的配置文件
  profiles:
    active: dev

另外,需要注意的是,从云端拉取下来的配置,使用@Configuration注解使用的会实时更新,使用@Value注解使用的需要在类上额外加上@RefreshScope注解,才能同步更新;

(@Configuration注解读取的配置会实时同步)

Nacos技术_第11张图片

(@Value注解读取的配置需要在类上面额外增加@RefreshScope注解)

Nacos技术_第12张图片

配置优先级

当一个服务中,既有加载了云端配置文件,也有本地配置文件,当具有相同配置时,配置的优先级是:

  • 云端配置 > 本地配置;

其中,云端配置:

  • 带环境的配置 > 不带环境的配置 > 扩展配置 > 共享配置;

再其中,扩展配置、共享配置在bootstrap.yml中关联了多个时,使用规则是后来居上,即使用最后的配置

(当关联了多个扩展配置、共享配置,使用的是后面的)

Nacos技术_第13张图片

(3)权重

在集群环境下,默认的负载均衡策略是随机访问,可以在nacos的服务详情中选择某一台服务器的权重,权重越高,被访问的概率越大。

Nacos技术_第14张图片

(4)负载均衡

可以在配置文件中,设置集群环境下的负载均衡策略为Nacos规则

(bootstrap.yml文件)

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

总结

Nacos是阿里巴巴提供的一门注册中心技术,Nacos在微服务之上,提供了一系列管理、协调微服务的功能,如服务管理、配置管理、权重、负载均衡等。

你可能感兴趣的:(springcloud,微服务,nacos)