Nacos

简介

Nacos:Dynamic Naming and Configuration Service

Nacos就是注册中心+配置中心的组合 ,等价于Eureka+config

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

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

Nacos生态图

如 Nacos 全景图所示,Nacos 无缝支持一些主流的开源生态,例如

使用 Nacos 简化服务发现、配置管理、服务治理及管理的解决方案,让微服务的发现、管理、共享、组合更加容易。

下载安装

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

安装

Nacos有window版也有linux版本,推荐使用linux,推荐使用linux版

linux版安装步骤 去GitHub上下载源码或者是压缩包,就压安装包之后,进入bin目录,直接运行startup.cmd

命令如下

tar -xvf nacos-server-$version.tar.gz # 解压
cd  nacos/bin  #进入bin目录
#运行
sh ./startup.sh -m standalone  #非集群
#关闭
sh shutdown.sh

启动之后 通过访问 http://linux的ip地址:8848/nacos 来测试是否访问成功

如果成功 会出现一个Nacos的登录页面,默认账号密码是 nacos

之后就是

说明你成功的部署以及安装成功了

实例介绍

SpringCloud Alibaba Nacos服务注册和配置中心

不得不说Nacos很强,不但有服务注册/发现,而且也有配置中心等等……

Nacos服务注册

使用案例:

1.新建cloudalibaba-provider-payment9001

2.POM

​ 父pom

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.1.0.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

​ 本pom

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

3.yml

server:
  port: 9001

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

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

4.PaymentController业务类

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

    @GetMapping("/payment/nacos/{id}")
    public String getPayment(@PathVariable("id") Integer id){
        return "nacos register, serverport=" + serverPort + "\t id:" + id;
    }

}

5.主启动上记得开启@EnableDiscoveryClient

6.启动

去Nacos上看下注册进去了吗

测试集群,复制cloudalibaba-provider-payment9001 新建cloudalibaba-provider-payment9002,修改端口

以上是服务生产者,下面开始测试服务消费者,

新建cloudalibaba-consumer-nacos-order83

引入依赖

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

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

主启动一样开启@EnableDiscoveryClient

Resttemplateconfig

@Configuration
public class MyConfig {

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

业务类

@RestController
@Slf4j
public class OrderController {

   @Autowired
   private RestTemplate getRestTemplate;

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

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

}

启动测试,

为什么没有引入ribbon也有负载均衡的能力?

因为Nacos自己已经集成了ribbon所以我们不必自己引入

Nacos配置中心

话不多说直接上实例

新建cloudalibaba-config-nacos-client3377

引入依赖

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

bootstrap.yml

server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # 注册中心
      config:
        server-addr: localhost:8848 # 配置中心
        file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到

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

application.yml

spring:
  profiles:
    active: dev

controller

@RestController
@Slf4j
@RefreshScope
public class ClientController {
    @Value("${config.info}")
    private String configInfo;

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

}

在Nacos中添加配置信息

Nacos中的配置规则

最后公式
$
-$.$
nacos-config-client-dev.yaml

在nacos上新建配置文件,记住后最为yaml不能为yml,其实两者都是一样的但是nacos就是不支持,希望后面能支持把

Data ID 的来历

测试 http://localhost:3377/config/info

Nacos的你改了配置会自动刷新, 这一点还是比Springcloud config 好

但是要在controller中加注解@RefreshScope 不然也是不行的

nacos还可以通过命名空间来分区分组管理配置文件的空间

这就是为什么要按要求来命名配置文件了

Nacos集群和持久化配置(重要)

官方说明

看这个图其实挺难看懂官方想表达的意思所以看这个图就简单了

不了解Nginx可以移步Nginx快速入门

Nacos持久化配置解释

其实Nacos默认自带的是嵌入式数据derby

derby到mysql切换步骤(mysql版本5.6以上)

nacos-server-1.1.4/nacos/conf目录下找到sql脚本(nacos-mysql.sql)在你的数据库里面执行脚本,

nacos-server-1.1.4/nacos/conf目录下找到application.properties

添加配置

spring.datasource.platform=mysql
 
db.num=1
db.url.0=jdbc:mysql://11.162.193.16:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

启动Nacos,可以看到是个全新的空记录界面,以前是记录在derby

这就是切换数据库的步骤

集群模式下运行Nacos

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

修改nginx的配置文件nginx.conf

启动测试

尝试在nacos中建一个配置文件,在前往数据看有没有数据,有的话说明配置成功

之后就是高可用总结

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

只有不断的努力才会有更大的惊喜等着你去发现!!