spring cloud alibaba nacos 注册中心,配置中心组件

一、 nacos 下载及安装

nacos 官网下载 nacos-server-1.2.0-beta.1.tar.gz 解压

执行  startup.cmd 命令

访问 localhost:8848/nacos

账号: nacos

密码: nacos

 

二、创建cloudalibaba-provider-payment9001 项目‘

1.添加 spring cloud alibaba nacos 依赖

   <dependencies>
        <!--  SpringCloud alibaba nacos    -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--  web组件      -->
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.sc2020</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

2.修改 application.yml 配置

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

3.启动类添加 注解:@EnableDiscoveryClient

4.消费者服务也需要注册到nacos注册中心,使用restTemplate或者feign调用接口即可

5.  nacos 与 其他注册中心特性对比

 6. Nacos 中 AP和CP模式的切换(NACOS支持AP和CP模式的切换)

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

 

何时选择使用何种模式?

一般来说,

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

如果在服务级别编辑或者存储配置信息,那么CP是必须,K8S服务和DNS服务则适用于CP模式,CP模式下则支持注册持久化实例,此时则是以Raft协议为集群运行模式,该模式注册实例之前必须先注册服务,如果服务不存在,则返回错误。

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

7. NACOS 作为分布式配置中心

(1)pom文件添加依赖

   <dependencies>
        <!--  SpringCloud alibaba nacos config   -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        <!-- SpringCloud alibaba nacos discovery -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <!--  web组件      -->
        <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>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>com.sc2020</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

(2)编写 bootstrap.yml文件

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

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

(3) 编写 application.yml

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

(4) 服务启动类添加 @EnableDiscoveryClient  

     控制层controller 添加  @RefreshScope 以支持nacos的动态刷新功能

    使用 @Value注解 即可读取到 nacos 配置中心的配置项内容

最后公式 : ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}

nacos ui 页面创建配置项

 8. 命名空间 、分组和DataID 三者关系

 默认清库:

   Namespace = public ,Group = DEFAULT_GROUP ,  默认cluster 是 DEFAULT. 

不使用默认的 group的情况下,可以在nacos 上创建 不同的 group,只需在bootstrap.yml文件中指定相应的 nacos config group 

配置项即可。

不使用 nacos 的默认命名空间的情况下,可以 新建其他的命名空间,新建完成之后  会生成一个命名空间序列号。如下所示在 bootstrap.yml中配置即可。

 9.nacos 的 集群介绍

(1) nacos 默认自带的是嵌入式数据库derby,可以查看 https://github.com/alibaba/nacos/blob/develop/config/pom.xml 得知引入的有apache derby 数据库依赖。

(2)derby 数据库切换到 mysql 数据库的配置步骤

nacos-server-1.1.4 /nacos/config 目录下找到sql脚本 ,执行 nacos-mysql.sql脚本 建表。

创建的数据库名称为:nacos_config

nacos-server-1.1.4/nacos/config 目录下找到application.properties ,在最后面添加 mysql相关的配置项

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=root
db.password=1234

配置完成之后重启 nacos 即可,此时可以看到一个全新的空记录界面,之前是数据被记录到derby中,现在是数据记录到mysql 中。

10. Linux 版本nacos 集群搭建

1个nginx + 3个nacos + 1个mysql 数据库配置

正常情况下 高可用需要 多个nginx 实例,这里为了方只配置一个nginx实例。

(1)将nacos默认的数据库derby 切换到 mysql。

下载安装linux 版本的nacos ,解压后 找到 config 目录下的nacos-mysql.sql脚本并执行建表语句,修改 application.properties ,添加 同9(nacos集群的介绍)中的mysql 相关配置项。

(2)复制 cluster.config.example 为 cluster.config 配置文件

 cp  cluster.config.example cluster.config

向 cluster.config 配置文件中添加如下信息用来说明以下三个nacos节点作为一个集群。

192.168.100.120:3333
192.168.100.120:4444
192.168.100.120:5555

注意: 这里的ip地址不能直接写成127.0.0.1,则应写成 linux命令hostname -i可以识别的ip地址。

(3) 复制 startup.sh 为 startup.sh.bk 作为一个备份文件,防止我们将startup.sh 修改坏了。

需要修改以下 三个地方:

添加    :p

          $PORT = $OPTARG;;

          -Dserver.port = ${PORT}

 

 执行命令依次启动三个 nacos 节点:

startup -p 3333

startup -p 4444

startup -p 5555

(4) 配置 nginx 

启动 nginx ,执行 nginx -c  /usr/local/nginx/conf/nginx.conf

访问  http://192.168.100.120:1111/nacos/#/login  测试 通过nginx 访问nacos

 执行命令 ps -ef | grep nacos | grep -v grep | wc -l  返回  3 ,说明三个nacos 节点已正常启动。 

最后将 项目 的application.yml中的 nacos server-addr 修改为 nginx 的访问地址(192.168.100.120:1111)即可。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章