Nacos 服务注册中心、配置中心、持久化、集群

简介

Nacos,英文全称Dynamic Naming and Configuration Service,Na为naming命名,co为configuration配置,s为服务,动态命名与配置服务。
Nacos主旨是一个易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它包含了注册中心、配置中心、健康检查、动态DNS、服务元数据和流量管理等功能。
在这里插入图片描述

在这里插入图片描述

环境

下载地址

https://github.com/alibaba/Nacos

运行

startup.cmd

访问localhost:8848出现以下界面说明启动成功。默认用户名密码都为nacos
在这里插入图片描述

Nacos作为注册中心

服务提供者

下面是服务提供者9001的配置,还有一个提供者9002与9001的配置类似。

依赖

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

application.yml

server:
  port: 9001
  
spring:
  application:
    name: nacos-payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        
management:
  endpoints:
    web:
      exposure:
        include: '*'

控制器

@RestController
public class PaymentController {

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

    @GetMapping("/payment")
    public String payment(){
        System.out.println(PORT);
        return PORT+"----payment";
    }

}

启动类添加@EnableDiscoveryClient注解

服务消费者

pom和yml配置与服务提供者9001的类似。

RestTemplate

@Configuration
public class ApplicationContextConfig {

    @LoadBalanced
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
    
}

控制器

@RestController
public class ConsumerController {

    private String SERVICE_URI="http://nacos-payment";

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/consumer")
    public String payment(){
        return restTemplate.getForObject(SERVICE_URI+"/payment",String.class);
    }

}

测试

在这里插入图片描述
说明服务注册成功

  • 访问消费者接口localhost:88/consumer可以正常轮询使用到9001和9002的服务
  • 原因:nacos集成了ribbon
    在这里插入图片描述

Nacos作为配置中心

概念

从大到小分别是

  • Namespace命名空间
  • Group
  • Data Id
    不同的namespace和group中可以存在同名的配置文件

配置文件命名规则

${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

使用

依赖

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

bootstrap.yml

server:
  port: 9001
  
spring:
  application:
    name: nacos-payment
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml #配置文件格式
        #group: TEST_GROUP
        #namespace: 7c95afef-c8b1-4375-900f-9e2707257428
  profiles:
    active: dev

配置文件

由命名规则和yml可以得出配置文件名为nacos-payment-dev.yaml,新建配置文件如下。
在这里插入图片描述

测试

Controller如下

@RestController
@RefreshScope
public class ConfigController {

    @Value("${config.info}")
    String info;
    
    @GetMapping("/config/info")
    public String getConfigInfo(){
        return info;
    }
}
  • 访问localhost:9001/config/info可以成功获取到配置文件的信息
  • namespace和group的配置类似,只需要在yml中多配置
    #group: TEST_GROUP
    #namespace: 7c95afef-c8b1-4375-900f-9e2707257428
    即可获取到对应namespace和group的配置文件。

Nacos持久化

Nacos默认自带的是嵌入式数据库derby,在集群模式下存在一致性问题。

derby切换到Mysql

在0.7版本之前,在单机模式时nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况。0.7版本增加了支持mysql数据源能力,具体的操作步骤:

  • 安装数据库,版本要求:5.6.5+
  • 初始化mysql数据库,数据库初始化文件:conf/nacos-mysql.sql。
  • 修改conf/application.properties文件,增加支持mysql数据源配置(目前只支持mysql),添加mysql数据源的url、用户名和密码。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow

再以单机模式启动nacos

sh startup.sh -m standalone

发布一个配置文件进行测试
在这里插入图片描述

nacos所有写嵌入式数据库的数据都写到了mysql
在这里插入图片描述

Nacos集群

在这里插入图片描述

配置集群配置文件

在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)

192.168.182.20:3333
192.168.182.20:4444
192.168.182.20:5555
192.168.182.20:8848

启动nacos

集群模式

  • 使用内置数据源
sh startup.sh -p embedded
  • 使用外置数据源
sh startup.sh

nginx配置

在这里插入图片描述

微服务配置

spring:
  cloud:
    nacos:
      discovery:
        #nginx的监听端口
        server-addr: 192.168.182.20:1111
      

版权声明:本文为weixin_44677487原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。