SpringCloud Alibaba Nacos---服务注册与配置中心

  前言:不断学习就是程序员的宿命

  中文:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

  官网:https://spring.io/projects/spring-cloud-alibaba

  英文版:https://github.com/alibaba/spring-cloud-alibaba

  分支主题:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html

一、Nacos

  官网:https://nacos.io/zh-cn/

  一个更易于构建原生应用的动态服务发现、配置管理和服务管理平台。Nacos=注册中心+配置中心=Eureka+Config+Bus

  下载地址:https://github.com/alibaba/nacos/releases

  https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html#_spring_cloud_alibaba_nacos_discovery

二、Nacos作为服务注册中心

  启动Nacos:/bin/startup.cmd启动Nacos,http://localhost:8848/,默认用户名与密码为nacos

1、Provider注册至Nacos

1.1、pom

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
pom

1.2、application.yml

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

management:
  endpoints:
    web:
      exposure:
        include: "*"
View Code

1.3、启动类

@SpringBootApplication
@EnableDiscoveryClient
public class PaymentMain9001 {
    public static void main(String[] args) {
        SpringApplication.run(PaymentMain9001.class, args);
    }
}
启动类

1.4、测试

  启动模块cloudalibaba-provider-payment9001,查看Nacos,服务已注册至Nacos

2、Consumer注册至Nacos

2.1、pom

 <dependencies>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>com.xd.springcloud</groupId>
            <artifactId>cloud-api-common</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>
pom

2.2、application.yml

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
application.yml

2.3、测试

3、Nacos天生支持负载均衡

4、Nacos服务发现实例模型

5、Nacos的AP与CP模式切换

  C是所有节点在同一时间看到的数据是一致的;A是所有的请求都会收到响应。何时选择使用何种模式? 

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

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

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

三、Nacos作为服务配置中心

  官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

1、Nacos基础配置

1.1、Nacos中的DataId的组成格式与SpringBoot配置文件中的匹配规则 

 

 1.2、测试

  测试前保证nacos客户端-配置管理-配置管理栏下游对应的yaml配置文件

2、Nacos分类配置(高级)

2.1命名空间、分组、DataID之间关系

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。

(1)NameSpace

  Nacos默认的命名空间是public、NameSpace主要用来隔离,比如我们现在有3个开发环境:开发、测试、生产环境,我们就可以创建3个NameSpace,不同的NameSpace之间是隔离的。

(2)Group

  默认是DEFAULT_GROUP,Group可以把不同的微服务划分到同一个分组里面去。

(3)Service

  Service就是微服务,一个Service可以包含多个Cluster(集群),Nacos默认Cluster是DEFAULT,Cluster是对指定的微服务一个虚拟划分。

  比如说为了容灾,将Service微服务分别部署在了杭州机房和广州机房,这时就可以给杭州机房的Service微服务起一个集群名称(HZ),广州机房微服务集群名称(GZ),还可以尽量让同一个机房的微服务相互调用,以提升性能。

(4)Instance

  就是微服务实例 

3、三种方案加载配置

DataID方案指定spring.profile.active和配置文件的DataID来使不同环境下读取不同的配置:默认空间+默认分组+新建dev和test两个DataId

  通过spring.profile.active属性就能进行多环境下配置文件的读取

Group方案:通过Group实现环境区分

Namespace方案:NameSpace+Group+profile区分

3.1DataID方案

3.2Group方案

3.3NameSpace方案

四、Nacos集群与持久化配置 

  参考:Linux下Nacos集群与持久化配置

posted @ 2020-03-28 19:43  coder、  阅读(2386)  评论(1编辑  收藏  举报