SpringCloud实战之路 | 应用篇(九)Spring Cloud Alibaba注册中心+配置中心Nacos

文章内容输出来源:拉勾教育Java高薪训练营;

Nacos介绍

一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos就是注册中心+配置中心的组合,简单对比Spring Cloud Netflix来说 Nacos = Eureka+Config+Bus

官⽹:https://nacos.io 下载地址:https://github.com/alibaba/Nacos

功能特性

  • 服务发现及管理: 动态服务发现对以服务为中心的(例如微服务和云原生)应用架构方式非常关键。Nacos支持DNS-Based和RPC-Based(Dubbo、gRPC)模式的服务发现。Nacos也提供实时健康检查,以防止将请求发往不健康的主机或服务实例。借助Nacos,您可以更容易地为您的服务实现断路器。
  • 动态配置服务: 动态配置服务让您能够以中心化、外部化和动态化的方式管理所有环境的配置。动态配置消除了配置变更时重新部署应用和服务的需要。配置中心化管理让实现无状态服务更简单,也让按需弹性扩展服务更容易。
  • 动态DNS服务: 通过支持权重路由,动态DNS服务能让您轻松实现中间层负载均衡、更灵活的路由策略、流量控制以及简单数据中心内网的简单DNS解析服务。动态DNS服务还能让您更容易地实现以DNS协议为基础的服务发现,以消除耦合到厂商私有服务发现API上的风险。
  • 服务及其元数据管理: Nacos 能让您从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。

Nacos部署

与Eureka不同,Nacos不需要再创建项目,官方已经提供好了安装包(下载地址:https://github.com/alibaba/nacos/releases)
启动命令:

#linux/mac:
sh startup.sh -m standalone

#windows:
cmd startup.cmd

访问nacos管理页面:http://127.0.0.1:8848/nacos/#/login(默认用户名字/密码:nacos/nacos)
在这里插入图片描述

Nacos注册中心

在父项目maven中引入spring cloud alibaba依赖

    <dependencyManagement>
        <dependencies>
            <!--Spring Cloud Alibaba(SCA) -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

在服务提供者引入Nacos注册中心依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

修改服务的配置文件

server:
  port: 8080
spring:
  application:
    name: cloud-service-user
  main:
    allow-bean-definition-overriding: true
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useUnicode=true
    username: root
    password: root
  cloud:
    nacos:
      discovery:
        ################ 配置nacos server地址
        server-addr: 127.0.0.1:8848 
  jpa:
    database: MySQL
    show-sql: true
    hibernate:
      naming:
        physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl  #避免将驼峰命名转换为下划线命名
management:
  endpoints:
    web:
      exposure:
        include: "*"
  # 暴露健康接口的细节
  endpoint:
    health:
      show-details: always

在这里插入图片描述

Nacos数据模型(领域模型)

Namespace命名空间、Group分组、集群这些都是为了进行归类管理,把服务和配置文件进行归类,归类之后就可以实现隔离的效果,对于服务来说,不同命名空间中的服务不能够互相访问调用。

  • Namespace: 命名空间,对不同的环境进行隔离,例如隔离开发环境、测试环境和生产环境
  • Group: 分组,将若干个服务或者若干个配置集归为一组,通常习惯一个系统归为一个组
  • Service: 某一个服务
  • DataId: 配置集或者可以认为是一个配置文件

推荐用法:

概念 描述
Namespace 代表不同的环境,如开发dev、测试test、⽣产环境prod
Group 代表某项目
Service 某个项目中具体xxx服务
DataId 某个项目中具体的xxx配置文件

注册后服务配置信息

在这里插入图片描述

  • 分组: 分组的名称默认DEFAULT_GROUP(可以自定义设置分组)
  • 元数据: 与eureka中的元数据类似
  • 服务路由类型: 常规使用,保持默认即可,主要用它做多数据中心的就近访问
  • 权重: 权重越大承担流量越大
  • 下线: 支持动态操作服务的上线下线,下线后消费者获取不到该实例的信息了
  • 保护阈值: 可以设置为0-1的浮点数,当保护阈值>健康实例数/当前服务总实例数时,说明健康的实例过少,保护阈值会触发(状态true),nacos会把所有实例信息全部提供出去(健康的实例+不健康的实例),消费者有可能会请求到不健康的实例上,导致请求失败,但这样也会比雪崩好,牺牲部分请求,保证系统的可用。
    保护阈值场景: 一般流程下服务消费者要从nacos中请求某一个提供者的实例,nacos会给一个健康的提供者的实例,但是在大流量高并发访问量的情况下,如果服务有100个实例,只有2个是健康的,如果nacos只返回这俩个健康的实例,后续的消费者都请求到这两个实例上,2个健康的实例也扛不住了,整个服务 就扛不住,上游的微服务也会导致崩溃,产⽣雪崩效应。

负载均衡:Nacos客户端引入的时候,会关联引入Ribbon的依赖包,我们使用OpenFiegn的时候也会引入Ribbon的依赖,Ribbon包括Hystrix都按原来方式进行配置即可

Nacos集群配置

修改配置文件:
1.nacos/config/application.properties,修改每个nacos节点端口号server.port和绑定的ip地址nacos.inetutils.ip-address
2.复制一份conf/cluster.conf.example文件,命名为cluster.conf,在配置文件中设置集群中每个节点的信息

# 集群节点配置
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850

启动命令:

sh startup.sh -m cluster

Nacos配置中心

添加配置信息

在这里插入图片描述
微服务通过 Namespace + Group + Data ID 来锁定配置⽂件,Namespace不指定就默认public,Group不指定就默认 DEFAULT_GROUP
Data ID格式:
${prefix}-${spring.profile.active}.${file-extension}

  • prefix 默认为 spring.application.name,也可以通过配置项spring.cloud.nacos.config.prefix修改
  • spring.profile.active 即为当前环境对应的 profile
  • file-exetension 为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension 来配置。⽬前只⽀持 properties 和 yaml类型

在微服务引入Nacos配置中心依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

在之前的修改配置文件增加

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      #配置中心 
      config:
        server-addr: 127.0.0.1:8848
        #不填默认为public 如果自己定义了namespace这里可以按需要修改为自己的*填写的是Namespace的id
        #namespace:
        #不填默认为DEFAULT_GROUP
        #group:
        file-extension: yaml

动态刷新配置信息

@RestController
@RefreshScope //动态刷新配置信息
public class CodeController {

    @Value("${spring.datasource.driver-class-name}")
    private String driverClassName;

    @GettMapping("/test")
    public String test() {
        return driverClassName;
    }

}

如何配置多个配置文件

spring:
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
      #配置中心 
      config:
        server-addr: 127.0.0.1:8848
        #不填默认为public 如果自己定义了namespace这里可以按需要修改为自己的*填写的是Namespace的id
        #namespace:
        #不填默认为DEFAULT_GROUP
        #group:
        file-extension: yaml
        #多个配置文件
        ext-config[0]:
 		  data-id: a.yaml
          group: DEFAULT_GROUP
          refresh: true #开启扩展dataId的动态刷新
        ext-config[1]:
 		  data-id: a.yaml
          group: DEFAULT_GROUP
          refresh: true #开启扩展dataId的动态刷新

Nacos数据持久化

Nacos 默认使用嵌入式数据库进行数据存储,它支持改为外部Mysql存储
创建数据库nacos_config,sql脚本位于config/nacos-mysql.sql目录下
修改/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&autoReconnec
t=true
db.user=root
db.password=root

猜你喜欢

转载自blog.csdn.net/qq_23830637/article/details/106101932