Spring Cloud Alibaba Nacos

一、介绍

  Nacos:由单词Naming和Cofiguration的前两个字母组成,最后的s代表Service。

1,作用

  • 替代Eureka做服务注册中心
  • 替代Cloud Config做服务配置中心

2,地址

  文档://nacos.io/zh-cn/docs/what-is-nacos.html

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

  下载://github.com/alibaba/nacos/tags

3,各注册中心比较

比较 nacos eureka consul zookeeper
一致性协议 CP + AP 可切换 AP CP CP
健康检查 TCP/HTTP/MySQL/Client Beat Client Beat TCP/HTTP/gRPC/CMD Client Beat
负载均衡 权重/DSL/metadata/CMDB Ribbon Fabio
雪崩保护 支持 支持 不支持 不支持
自动注销实例 支持 支持 不支持 支持
访问协议 HTTP/DNS/UDP HTTP HTTP/DNS TCP
监听支持 支持 支持 支持 支持
多数据中心 支持 支持 支持 不支持
跨注册中心 支持 不支持 支持 不支持
SpringColud集成 支持 支持 支持 不支持
Dubbo集成 支持 不支持 不支持 支持
kubernates集成 支持 不支持 支持 不支持

 

二、nacos安装

//github.com/alibaba/nacos/releases/tag/1.1.4

1,单机版

直接下载:nacos-server-1.1.4.tar.gz

a)上传并解压

tar -xvf nacos-server-1.1.4.tar.gz

b)将nacos/conf/nacos-mysql.sql导入到mysql的数据库中

c)在配置文件中添加数据库配置

vi nacos/conf/application.properties

#########在文末添加#####################
spring.datasource.platform=mysql

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

d)启动nacos

nacos/bin/startup.sh -m standalone

2,集群版

a)下载解压上传,导入数据,修改application.properties(同上)

b)修改cluster.conf

#查看对应的主机
[root@hadoop103 nacos_cluster]# hostname -i
192.168.232.103
#配置集群
[root@hadoop103 nacos_cluster]# vi conf/cluster.conf
192.168.232.103:3333
192.168.232.103:4444
192.168.232.103:5555

c)修改startup.sh

vi bin/startup.sh

     

d)启动nacos

bin/startup.sh -p 3333
bin/startup.sh -p 4444
bin/startup.sh -p 5555

e)配置nginx.conf

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    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 / {
            proxy_pass http://cluster;
        }
    }
}

f)nginx启动

./sbin/nginx -c ./conf/nginx.conf
#访问路径
http://hadoop103:1111/nacos

三、Nacos服务启动

1,Nacos基础示例

源码:cloudalibaba-provider-payment9001

  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>
</dependencies>

  yaml文件

server:
  port: 9001

spring:
  application:
    name: nacos-payment-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
management:
  endpoints:
    web:
      exposure:
        include: '*'

  application

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

2,Nacos作为基础配置中心

源码:cloudalibaba-config-nacos-client3377

  pom文件

<!--nacos-config-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--web + actuator-->
<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>

  yaml文件

server:
  port: 3377
spring:
  application:
    name: nacos-config-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务注册中心地址
      config:
        server-addr: localhost:8848 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId

  applicaiton同上

  controller

@RestController
@RefreshScope //动态刷新引用值
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

  nacos中新建配置文件nacos-config-client-dev.yaml

      

3,集群Nacos的示例

源码地址:cloudalibaba-config-nacos-cluster3388

  与上一步(2)的配置基本一致

  只有对应的yaml文件不同

server:
  port: 3388
spring:
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
  application:
    name: nacos-config-cluster
  cloud:
    nacos:
      discovery:
        server-addr: hadoop103:1111 #服务注册中心地址
      config:
        server-addr: hadoop103:1111 #配置中心地址
        file-extension: yaml #指定yaml格式的配置

四、DataId,Group,NameSpace

源码地址:cloudalibaba-config-nacos-cluster3388

DataId:${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

Group:对应Group

NameSpace:对应命名空间id

server:
  port: 3388
spring:
  profiles:
    active: dev  #${spring.applicaiton.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}作为nacos的dataId
  application:
    name: nacos-config-cluster
  cloud:
    nacos:
      discovery:
        server-addr: hadoop103:1111 #服务注册中心地址
        namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #服务发现所属的命名空间
      config:
        server-addr: hadoop103:1111 #配置中心地址
        file-extension: yaml #指定yaml格式的配置
        group: TEST_GROUP #对应group
        namespace: a35df75a-6d0e-4e28-9b89-b4d2d8dd87e6 #对应myns的命名空间的ID