SpringCloud Alibaba_Nacos服务注册和配置中心

文章目录

  • 简介
  • 下载安装运行
  • 服务注册中心
    • 服务提供者
    • 服务消费者
    • 注册中心对比
      • Nacos AP与CP模式切换
  • 服务配置中心
    • 基础配置
    • 分类配置
      • NameSpace、Group、Data id三者的关系
      • 三种分类加载方案配置
        • Data id方案
        • Group 方案
        • Namespace方案
  • Nacos集群和持久化配置
    • 持久化配置
    • Linux生产环境配置
      • MySQL配置
      • application.properties配置
      • 集群配置cluster.conf
      • 编辑Nacos的启动脚本startup.sh,使能够接受不同的启动端口
      • Nginx 配置
      • yaml
  • 参考Demo

简介

Nacos是Naming、Configuration和Service的组合,即Dynamic Naming and Configuration Service,通俗来说,就是注册中心和配置中心的组合(等价于Eureka+Config+Bus)
SpringCloud Alibaba_Nacos服务注册和配置中心_第1张图片

下载安装运行

  1. 下载
    https://github.com/alibaba/nacos/releases
  2. 运行
    解压安装包,直接运行bin目录下的startup.cmd
    SpringCloud Alibaba_Nacos服务注册和配置中心_第2张图片
  3. 访问控制台
    命令运行成功后直接访问http://localhost:8848/nacos,用户名密码都是nacos
    SpringCloud Alibaba_Nacos服务注册和配置中心_第3张图片

服务注册中心

服务提供者

  1. pom

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
  1. yaml
server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

management:
  endpoints:
    web:
      exposure:
        include: '*'
  1. 主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class PaymentMain9001
{
    public static void main(String[] args) {
            SpringApplication.run(PaymentMain9001.class, args);
    }
}

服务消费者

  1. pom

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
  1. yaml
server:
  port: 83

spring:
  application:
    name: nacos-order-consumer
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
  nacos-user-service: http://nacos-payment-provider
  1. 主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class OrderNacosMain83
{
    public static void main(String[] args)
    {
        SpringApplication.run(OrderNacosMain83.class,args);
    }
}

注册中心对比

SpringCloud Alibaba_Nacos服务注册和配置中心_第4张图片

Nacos AP与CP模式切换

AP代表高可用,CP代表数据一致,如何选择?

一般来说,如果不需要存储服务级别的信息且服务实例是通过Nacos-client注册,并且能够保持心跳,那么就可以选择AP模式。当前主流的服务如SpringCloud和Dubbo,都适用AP模式,AP模式为了服务的可能性而减弱了一致性,因此AP模式下只支持注册临时实例。

如果需要在服务级别编辑或者存储配置信息,那么CP模式是必须的,K8S和DNS服务则适用CP模式。CP模式下支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式下注册实例必须先注册服务,如果服务不存在,则会返回错误。

curl -X PUT '$NACOS_SERVER:8848/ncaos/v1/ns/operator/switches?entry=serverMode&value=CP'

服务配置中心

基础配置

1.pom


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

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>
  1. bootstrap.yaml
server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4
  1. application.yaml
spring:
  profiles:
    active: dev # 表示开发环境
    #active: test # 表示测试环境
  1. 主启动类
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConfigClientMain3377
{
    public static void main(String[] args) {
        SpringApplication.run(NacosConfigClientMain3377.class, args);
    }
}
  1. controller
@RestController
@RefreshScope //支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
  1. Nacos添加配置信息
    SpringCloud Alibaba_Nacos服务注册和配置中心_第5张图片
    设置Data id
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

SpringCloud Alibaba_Nacos服务注册和配置中心_第6张图片
Nacos会记录配置文件的历史版本默认保留30天,此外还有一键回滚功能。

分类配置

SpringCloud Alibaba_Nacos服务注册和配置中心_第7张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第8张图片

NameSpace、Group、Data id三者的关系

SpringCloud Alibaba_Nacos服务注册和配置中心_第9张图片
类似于Java中的package和类名。
最外层的namespace是可以用于区分部署环境的,group和data id逻辑上区分两个目标对象
默认:

  • namespace=public
  • group=DEFAULT_GROUP
  • Cluster=DEFAULT

namespace主要是用来实现隔离。比如有3个环境:开发、测试、生产,则可以创建三个namespace。

group可以把不同微服务划分到同一个分组。

Service是微服务:一个Service可以包含多个Cluster,Cluster是对指定微服务的一个虚拟划分。
比方说为了容灾,将Service分别部署在杭州机房和广州机房,这时就可以给杭州机房的Service建一个Cluster(HZ),广州机房的Service建一个Cluster(GZ),可以尽量让同一个机房的微服务互相调用,以提升性能。

Instance就是微服务实例。

三种分类加载方案配置

Data id方案

指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置。

默认空间+默认分组+新建dev和test两个DataID
SpringCloud Alibaba_Nacos服务注册和配置中心_第10张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第11张图片
通过spring.profile.acvice属性就能进行多环境下配置文件的读取。
SpringCloud Alibaba_Nacos服务注册和配置中心_第12张图片

Group 方案

通过Group实现环境区分
SpringCloud Alibaba_Nacos服务注册和配置中心_第13张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第14张图片
在bootstrap.yaml中config下增加一条group的配置即可。可配置为DEV_GROUP或TEST_GROUP
SpringCloud Alibaba_Nacos服务注册和配置中心_第15张图片

Namespace方案

SpringCloud Alibaba_Nacos服务注册和配置中心_第16张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第17张图片
yaml:

server:
  port: 3377

spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #Nacos服务注册中心地址
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: DEV_GROUP
        namespace: 7d8f0f5a-6a53-4785-9686-dd460158e5d4

Nacos集群和持久化配置

SpringCloud Alibaba_Nacos服务注册和配置中心_第18张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第19张图片
默认Nacos使用嵌入式数据库实现数据的存储。所以,如果多个默认配置的Nacos节点,数据存储是存在一致性问题的,为了解决这个问题,Nacos采用集中式存储的方式来支持集群化部署,目前只支持MySQL的存储。

持久化配置

Nacos默认自带的是嵌入式数据库derby。
切换MySQL,执行安装目录/conf下nacos-mysql.sql
修改application.properties

#*************** Config Module Related Configurations ***************#
### If user MySQL as datasource:
 spring.datasource.platform=mysql

### Count of DB:
 db.num=1

### Connect URL of DB:
 db.url.0=jdbc:mysql://1.1.1.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
 db.user=user
 db.password=password

Linux生产环境配置

MySQL配置

执行SQL脚本nacos-mysql.sql

application.properties配置

SpringCloud Alibaba_Nacos服务注册和配置中心_第20张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第21张图片

集群配置cluster.conf

SpringCloud Alibaba_Nacos服务注册和配置中心_第22张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第23张图片

编辑Nacos的启动脚本startup.sh,使能够接受不同的启动端口

SpringCloud Alibaba_Nacos服务注册和配置中心_第24张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第25张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第26张图片
SpringCloud Alibaba_Nacos服务注册和配置中心_第27张图片

Nginx 配置

SpringCloud Alibaba_Nacos服务注册和配置中心_第28张图片

yaml

SpringCloud Alibaba_Nacos服务注册和配置中心_第29张图片

参考Demo

https://github.com/zzyybs/atguigu_spirngcloud2020

你可能感兴趣的:(Spring)