天天看点

SpringCloud Alibaba Nacos服务注册和配置中心1、Nacos概述2、Nacos服务注册中心3、Nacos作为配置中心(基础配置)4、Nacos集群和持久化配置5、学习地址

SpringCloud Alibaba Nacos

  • 1、Nacos概述
    • 1.1、基本介绍
    • 1.2、与其它服务中心对比
    • 1.3、安装并运行Nacos
  • 2、Nacos服务注册中心
    • 2.1、基于Nacos的服务提供者
    • 2.2、基于Nacos的服务消费者
  • 3、Nacos作为配置中心(基础配置)
    • 3.1、Nacos中的匹配规则
    • 3.2、微服务拉取配置
    • 3.3、Nacos作为配置中心(分类配置)
  • 4、Nacos集群和持久化配置
    • 4.1、概述
    • 4.2、Nacos持久化配置
    • 4.3、Linux版Nginx+Nacos+MySQL配置高可用
  • 5、学习地址

1、Nacos概述

1.1、基本介绍

Nacos:Naming+Configuration的前两个字母,S代表Service。一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

Nacos就是注册中心 + 配置中心的组合:Nacos = Eureka+Config +Bus

GitHub地址:https://github.com/alibaba/Nacos

中文文档:https://nacos.io/zh-cn/index.html

1.2、与其它服务中心对比

Nacos支持AP与CP之间的切换

SpringCloud Alibaba Nacos服务注册和配置中心1、Nacos概述2、Nacos服务注册中心3、Nacos作为配置中心(基础配置)4、Nacos集群和持久化配置5、学习地址

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’

1.3、安装并运行Nacos

Windows版本

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

2、解压到指定文件夹,进入bin目录下直接点击startup.cmd运行。

3、访问:http://localhost:8848/nacos

4、账号和密码都是nacos登录页面即可登录成功

2、Nacos服务注册中心

2.1、基于Nacos的服务提供者

1、微服务父Pom添加依赖spring-cloud-alibaba-dependencies,子Pom添加spring-cloud-starter-alibaba-nacos-discovery依赖。(后面不做介绍)

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

2、Yaml配置文件

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

management:
  endpoints:
    web:
      exposure:
        include: '*' #暴露所有web监控端点
           

3、主启动类

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

4、业务类(返回该微服务的端口号)

@RestController
public class PaymentController {
    @Value("${server.port}")
    private String serverPort;

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id) {
        return "Nacos 注册中心,,端口号: " + serverPort + "\t id=" + id;
    }
}
           

5、测试

可以在Nacos-服务管理-服务列表控制台看到注册进来的微服务名称

再浏览器中输入http://localhost:9001/payment/nacos/123可以访问到端口号加上id。

6、负载均衡前期准备

再依照9001端口创建9002微服务,加依赖,改Yaml,写主类/业务类。

如果想省事可以直接拷贝虚拟端口映射:①.再已运行的9001右击-Copy Configuration。②.更改配置名,并添加VM options:-Dserver port-9011。可以开启以9011端口的微服务。

2.2、基于Nacos的服务消费者

为什么Nacos自动支持负载均衡

因为Nacos在引入已经自动集成了Ribbon,所以自带负载均衡功能。

1、添加依赖spring-cloud-starter-alibaba-nacos-discovery。

2、修改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 
           

3、主启动类

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

4、注册RestTemplate用于调用服务类(配置类)

@Configuration
public class ApplicationContextBean {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
           

5、业务类

@RestController
@Slf4j
public class OrderNacosController {

    @Resource
    private RestTemplate restTemplate;

    @Value("${service-url.nacos-user-service}")
    private String serverURL;

    @GetMapping("/consumer/payment/nacos/{id}")
    public String paymentInfo(@PathVariable("id") Integer id) {
        return restTemplate.getForObject(serverURL + "/payment/nacos/" + id, String.class);
    }
}
           

6、测试

可以在Nacos控制台看到已经注册的两个微服务提供者与一个微服务消费者

通过访问:http://localhost:83/consumer/payment/nacos/123

可以发现获得的端口号是9001和9002交替出现,所以证明Nacos自动实现轮询负载均衡功能,既可以自动更改Ribbon的负载均衡的算法。

3、Nacos作为配置中心(基础配置)

3.1、Nacos中的匹配规则

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

#公式:
${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
           

简单来说:

①、prefix 默认为 spring.application.name (应用名)的值

②、spring.profile.active 即为当前环境对应的 profile,可以通过配置项 spring.profile.active 来配置。

③、file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置

SpringCloud Alibaba Nacos服务注册和配置中心1、Nacos概述2、Nacos服务注册中心3、Nacos作为配置中心(基础配置)4、Nacos集群和持久化配置5、学习地址

3.2、微服务拉取配置

1、添加spring-cloud-starter-alibaba-nacos-config依赖

为什么两个配置?

Nacos同springcloud-config一样,在项目初始化时,要保证先从配置中心进行配置拉取,

拉取配置之后,才能保证项目的正常启动。

springboot中配置文件加载存在优先级顺序的,bootstrap优先级高于application

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

2、创建两个配置文件bootstrap与application

bootstrap

# nacos配置
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格式的配置
           

application

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

3、主启动类

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

4、业务类

@RestController
@RefreshScope //在控制器类加入@RefreshScope注解使当前类下的配置支持Nacos的动态刷新功能。
public class ConfigClientController
{
    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}
           

5、测试

启动前需要在nacos客户端-配置管理-配置管理栏目下有对应的yaml配置文件,访问:http://localhost:3377/config/info

6、自带动态刷新

修改下Nacos中的yaml配置文件,再次调用查看配置的接口,就会发现配置已经刷新。

3.3、Nacos作为配置中心(分类配置)

1、DataID方案

通过修改application.yml配置文件中的profile环境实现yaml的切换

2、Group方案

通过修改bootstrap.yml配置文件中的spring.cloud.nacos.config.group=组名即可修改组

3、Namespace方案

通过修改bootstrap.yml配置文件中的spring.cloud.nacos.config.namespace=空间ID即可修命名空间

4、Nacos集群和持久化配置

4.1、概述

官方说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

我们采用Nginx集群+Nacos集群+MySQL集群进行搭建高可用

SpringCloud Alibaba Nacos服务注册和配置中心1、Nacos概述2、Nacos服务注册中心3、Nacos作为配置中心(基础配置)4、Nacos集群和持久化配置5、学习地址

4.2、Nacos持久化配置

Nacos默认使用自带的数据库derby进行持久化,可以在源代码看到引入了derby数据库的依赖。

Windows版如何从derby切换到mysql

1、nacos\conf目录下找到sql脚本:nacos-mysql.sql。在MySQL创建库nacos_config;

并执行nacos-mysql.sql中的脚本创建表。

2、nacos\conf目录下找到application.properties添加以下内容

spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=数据库账号
db.password=数据库密码
           

3、重新启动Nacos可以看到没有记录了,重新创建一个配置文件可以在数据库中看到里面有记录证明修改成功。

4.3、Linux版Nginx+Nacos+MySQL配置高可用

1、下载Linux版本Nacos,并使用tar -zxvf进行解压到Linux服务器中

2、下载Linux版本MySQL版本>5.6.5以上。并使用mysql -uroot -proot,-u后面是用户名,-p后面是密码。创建数据库nacos_config并执行nacos\conf目录下的sql脚本:nacos-mysql.sql。nacos\conf目录下找到application.properties添加以下内容:

spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=数据库账号
db.password=数据库密码
           

3、Linux服务器上nacos的集群配置cluster.conf,nacos/conf/cluster.conf修改为ip:端口号。需要使用:hostname -i命令Linux识别的ip地址不能是127.0.0.1。

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

/mynacos/nacos/bin 的startup.sh(新版本不用修改)

SpringCloud Alibaba Nacos服务注册和配置中心1、Nacos概述2、Nacos服务注册中心3、Nacos作为配置中心(基础配置)4、Nacos集群和持久化配置5、学习地址

5、在bin目录下使用./startup.sh -p 三个端口号开启服务

6、Nginx的配置,由它作为负载均衡器

编辑/usr/local/nginx/conf下的nginx.conf文件:

upstream cluster{
        server 127.0.0.1:3333;
        server 127.0.0.1:4444;
        server 127.0.0.1:5555;
    }
    server {
        listen       1111;
        server_name  localhost;
        location / {
            #root   html;
            #index  index.html index.htm;
            proxy_pass http://cluster;
        }
        后面省略
           

7、测试通过nginx访问nacos:http://192.168.174.145:1111/nacos如果能够成功访问到并添加一个配置文件能够在mysql的表中发现增加记录证明集群搭建完毕。

8、通过服务端访问Nacos集群:修改yaml配置文件spring.cloud.nacos.discover.server-addr=192.168.174.145:1111,如果能够在Nacos看到服务注册进入那么集群搭建成功。

5、学习地址

来源:哔哩哔哩尚硅谷:https://www.bilibili.com/video/BV18E411x7eT