Nacos的初步学习

Nacos的初步学习

Nacos是Naming和Configuration和Service的简称

一个更易于构建云原生应用的动态服务发现,配置管理和服务管理平台

Nacos简单来说就是一个注册中心+配置中心的组合

可以近似看作等价于Eureka+Config+Bus

可以替代eureka做服务注册中心,替代config做服务配置中心
官网地址https://nacos.io/zh-cn/
下载地址https://github.com/alibaba/nacos/releases/tag/1.2.1
解压后,进入到bin中打开cmd运行startup.cmd

Nacos的初步学习_第1张图片

下载安装成功后访问http://localhost:8848/nacos 账号密码默认nacos

Nacos的初步学习_第2张图片

构建项目

1.我们为了避免多次引入,需要在父pom中引入我们的Alibaba依赖

<dependencies>
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-alibaba-dependenciesartifactId>
            <version>2.1.0.RELEASEversion>
            <type>pomtype>
            <scope>importscope>
        dependency>
    dependencies>

2.我们在子POM引入Nacos Discovery进行服务注册/发现

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





        
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-actuatorartifactId>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-devtoolsartifactId>
            <scope>runtimescope>
            <optional>trueoptional>
        dependency>
        <dependency>
            <groupId>com.xwb.springcloudgroupId>
            <artifactId>cloud-api-commonsartifactId>
            <version>1.0-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-testartifactId>
            <scope>testscope>
        dependency>

3.yml配置搭建(以下内容必须配置)

server:
  port: 9001

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

management:
  endpoints:
    web:
      exposure:
        include: '*'

4.主启动类和业务类

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


@RestController
public class PaymentController {

    @Value("${server.port}")
    private String serverPort;


    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "welcome to my nacos,this my serverPort"+serverPort+"\t your id:"+id;
    }
}


5.测试

只启动9001端口,无需启动其他端口

启动nacos服务器

完成后访问http://localhost:9001/payment/nacos/1

再访问http://localhost:8848/nacos可以看到下图
Nacos的初步学习_第3张图片

进入事例代码,我们可以选择复制代码与其他业务进行联动

6.若项目内容重复繁琐,可直接拷贝虚拟端口映射

Nacos的初步学习_第4张图片

Nacos的初步学习_第5张图片

设置虚拟端口,但是最终引用的还是我们9001端口

运行9011虚拟端口

Nacos的初步学习_第6张图片

查看http://localhost:8848/nacos ,可以看到9011的虚拟端口也进入了nacos中

Nacos的初步学习_第7张图片

7.nacos默认支持负载均衡

nacos集合了ribbon

Nacos的初步学习_第8张图片

8.通过子服务调用实现负载轮询

1.构建83端口号项目

pom文件保持不变

在yml文件多添加一个属性

# 消费者将要去访问的微服务名称(注册成功进nacos的为服务提供者)
server-url:
  nacos-user-service: http://nacos-payment-provider

这样可实现在controller当中路径指向的配置和代码杂糅

 /*
    *  以前的写法,配置和代码杂糅
    * public static final String SERVER_URL="http://nacos-payment-provider";
    * */
      //集成了feign
    @Value("${server-url.nacos-user-service}")
    private String serverURL;

9.Nacos支持ap和cp模式的切换

C 是所有节点在同一时间看到的数据是一致的,而A的定义是所有的请求都会受到相应。

何时选择使用何种模式?

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

如果需要在服务级别编辑或者存储配置信息,那么CP是必须的, K8S 服务和 DNS 服务则不适用于 CP 模式。

CP 模式下则支持注册持久化实例,此时则是 Raft 协议为集群模式运行, 该模式下注册实实例之前必须先注册服务。如果服务不存在,则会返回错误

如何进行模式切换

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

10.Nacos Config

pom修改

请使用groupId为com.alibaba.cloud且artifacId为的启动器spring-cloud-starter-alibaba-nacos-config

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

yml配置,有一个application和bootstrap

bootstrap


server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        file-extension: yaml # 声明DataId的格式为yaml
        server-addr: localhost:8848

# ${prefix}-${spring.profile.active}.${file-extension}等同于下面语句
#${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
# 一一对应下来就是    nacos-config-client-dev.yaml

application

spring:
  profiles:
    active: dev # 表示开发环境
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 p r e f i x . {prefix}. prefix.{file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

官网配置

Nacos的初步学习_第9张图片

Nacos的初步学习_第10张图片

当我们配置完成好整个3377端口后出现这个错误

Nacos的初步学习_第11张图片

这是因为

Nacos的初步学习_第12张图片
我们这个yaml和yml

按正常来说,nacos应该同时支持yml和yaml

但是nacos只默认支持yaml,由于我们平时习惯的yml

所以我们要更改这个错误的,应该将

Nacos的初步学习_第13张图片

这个Data Id改成yaml文件

修改完成后,重启一下nacos和3377端口即可

Nacos的初步学习_第14张图片

启动成功后,访问http://localhost:3377/config/info即可获得我们在nacos中配置的 nacos-config-client-dev.yaml的内容

动态刷新

我们去nacos中修改我们的config内容

Nacos的初步学习_第15张图片

当我们去刷新http://localhost:3377/config/info,随即更新config的内容

Nacos的初步学习_第16张图片

11.命名空间NameSpace+Group+Data ID三者间的关系,为什么这样设计

是什么

类似 Java 里面的 package 和 类名。
最外层的 namespace 是可以用于区分部署环境的, group 和 dataid 罗裳区分两个目标对象

三者情况

默认情况下:

Namespace=public , Group = DEFAULT_GROUP , 默认 Cluster 是DEAULT

Nacos 默认的命名空间是 public , Namespace 主要用来实现隔离。

比如说我们现在有三个环境:开发、测试、生产环境,我们可以创建三个Namespace , 不同的 Namespace 之间是隔离的。

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

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

比方说容灾,将 Service 微服务分别部署在杭州机房和广州机房,

这时就可以给杭州机房的一个 Service 微服务一个集群名字 HZ

给广州机房的一个集群名称 (GZ),还可以精良让同一个机房的微服务相互调用,以提升性能。

最后是 Instance , 就是微服务实例。

1.Data ID配置方案

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

方案:

默认空间+默认分组+新建dev和test两个Data ID

先在nacos控制台创建一个Data ID是test的文件

Nacos的初步学习_第17张图片

在aplication.yml中做一个修改,可修改工作环境

spring:
  profiles:
    # active: dev # 表示开发环境
    active: test # 表示开发环境

2.Group ID配置方案

在nacos控制台发布不同的group
在这里插入图片描述

修改bootstrap.yml添加group属性

config:
        file-extension: yaml # 声明DataId的格式为yaml
        server-addr: localhost:8848
        #group: TEST_GROUP
        group: INFO_GROUP

3.NameSpace的配置方案

Nacos的初步学习_第18张图片

命名空间id》》》》要在bootstrap中配置

public默认空间,无法删除

在nacos控制台中配置完成后,可以在左上角看到我们的自定义Namespace

Nacos的初步学习_第19张图片

在,我们新建的命名空间中新建文件

修改我们的bootstrap.yml

添加namespace属性,namespace要对应上命名空间ID而不是我们的自定义名称

 config:
        file-extension: yaml # 声明DataId的格式为yaml
        server-addr: localhost:8848
        #group: TEST_GROUP
        group: INFO_GROUP
        namespace: a50a13e7-31c5-49b1-8da6-e6a244599564

你可能感兴趣的:(Nacos的初步学习)