SpringCloud Alibaba Nacos

1.Nacos的安装部署

1.1.基于源码或安装包部署

参考:Nacos 快速开始

直接基于安装包安装即可,可以从 最新稳定版本 下载,

当前稳定版本是:2.1.1:Release 2.1.1 (Aug 8th, 2022) · alibaba/nacos · GitHub

0、准备一台虚拟机:192.168.10.30,将下载好的安装包上传到/opt/nacos目录下并完成解压

1、创建nacos_config数据库,导入相关表,sql文件在/nacos/conf

2、编辑nacos/conf/application.properties,添加数据库相关配置

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

3、启动nacos server

# 进入bin目录
cd ../bin
# 以单机模式启动 
sh startup.sh -m standalone

4、访问Console,http://192.168.10.30:8848/nacos,登录账号和密码是:nacos/nacos

1.2.基于docker快速构建开发环境

直接基于docker+docker compose 进行快速部署

# 下载 nacos-docker项目
git clone https://github.com/nacos-group/nacos-docker.git

# 查看tag
cd nacos-docker
git tag
# 切换到 2.1.1
git checkout -b v2.1.1 v2.1.1

#基于单机模式启动
cd example
docker-compose -f standalone-mysql-5.7.yaml up -d

2.使用Nacos完成服务注册与发现

本节操作请参考:Nacos 融合 Spring Cloud,成为注册配置中心

1、在使用之前要注意版本对应关系,参考:版本说明 Wiki,本课程采用的版本关系为

Spring Cloud Alibaba VersionSpring Cloud VersionSpring Boot Versio
2.2.9.RELEASESpring Cloud Hoxton.SR122.3.12.RELEASE

已在hailtaxi-parent中做好了版本对应

2、打开nacos console:http://192.168.10.30:8848/nacos,创建名称空间

3、添加依赖,在hailtaxi-api模块中添加对应依赖(hailtaxi-driver和hailtaxi-order从hailtaxi-api传递)

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

4、在 application.yml 中配置 Nacos server 的地址等信息

spring:
  application:
    name: hailtaxi-driver
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.10.30:8848
        namespace: 527a087f-0737-4387-a93a-550cf93e3ff6

其中namespace就是第2步创建的命名空间的ID值,同时要确保有spring.application.name,因为它将作为服务名称注册到nacos server。

对于nacos server而言,一个服务的唯一key是:namespace/group/servicename,这里采用了默认的分组。

5、在启动类上标注@EnableDiscoveryClient注解

6、启动,查看nacos 控制台查看是否有服务注册信息

7、hailtaxi-order项目用相同的方式完成配置

8、启动两个项目,完成以下测试

GET http://localhost:18081/driver/info/1
POST http://localhost:18082/order/1/2

3.使用Nacos作为配置中心

本节操作请参考:Nacos 融合 Spring Cloud,成为注册配置中心

3.1.应用托管配置到Nacos

0、先完成hailtaxi-driver的改造

1、在hailtaxi-api模块中添加依赖

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

2、现在要从外部配置中心加载配置,需要在bootstrap.yml/ bootstrap.properties文件中指定外部配置中心的地址信息,故创建bootstrap.yml,将原有application.yml中的所有配置项拷贝过来

3、托管到nacos server侧的配置都有一个唯一的key:namespace/group/dataId,接下来就是在应用端配置自己应用要读取的配置dataId,nacos的SDK根据该dataId去nacos server 获取配置一个配置文件内容,而dataId的组成是

${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档

    注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

故在bootstrap.yml中的配置如下

spring:
  application:
    name: hailtaxi-driver
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.10.30:8848
        namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
      config:
        server-addr: 192.168.10.30:8848
        namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
        file-extension: yaml

因此,得出dataId为:hailtaxi-driver.yaml

4、在nacos 控制台创建dataIdhailtaxi-driver.yaml的配置,将应用端的一些配置项进行托管,比如:数据源等;

但端口,应用名称等信息一般还是在应用侧

添加后注意发布出去!!!

另外:应用侧这些配置项可以注释掉

5、启动hailtaxi-driver服务,如能成功启动则说明没有问题,成功从nacos获取到配置信息!!!

6、按相同的方式将hailtaxi-order服务的配置完成托管并测试!!!

3.2.多环境配置

从应用侧dataId的组成格式来看

${prefix}-${spring.profiles.active}.${file-extension}

我们是可以在不同的环境下读取nacos上的不同配置,下面针对hailtaxi-driver服务进行演示

1、在nacos控制台创建两个配置,一个test环境,一个dev环境

test环境dataId为:hailtaxi-driver-test.yaml,里面的配置项将数据库修改为一个不存在的【仅便于测试】

dev环境dataId为:hailtaxi-driver-dev.yaml,里面的配置项不变

tips:可以在控制台基于原有配置文件进行克隆然后修改

2、在hailtaxi-driver项目的bootstrap.yml中添加profile配置

spring:
  profiles:
    active: dev

3、重启服务,访问:http://localhost:18081/driver/info/1

4、切换profiletest,重启测试,【理论结果:启动报错,找不到数据库】

5、重新切换profiledev保证正常!!

3.3.共享配置

目前:每个应用都需要根据自己的dataId去nacos server读取一个配置文件,然后加载配置文件中的配置项,

现在的场景是:多个应用之间有许多共同的配置项,则需要在每个应用对应的配置文件中都配置这些配置项,届时管理起来极为不方便

解决办法是:在nacos server端用一个配置文件保存这些公共配置项,各个应用通过指定这个公共配置文件的的dataId来读取,这就是nacos支持的共享配置

1、拿hailtaxi-driver为例进行改造,在控制台创建common.yaml的配置文件,将hailtaxi-driver服务的数据源配置项放进去【便于测试】,并将hailtaxi-driver-dev.yaml中根数据源相关的配置项注释掉

2、在hailtaxi-driver服务中指定

spring:
  application:
    name: hailtaxi-driver
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.10.30:8848
        namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
      config:
        server-addr: 192.168.10.30:8848
        namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
        file-extension: yaml
        shared-configs:
          - dataId: common.yaml
            refresh: true
  profiles:
    active: dev

3、启动测试!!!

tips:nacos还提供了一个扩展配置,可用于在应用端将一些不想放到主配置文件中的配置项放到扩展配置文件中

spring:
application:
name: hailtaxi-driver
cloud:
nacos:
discovery:
server-addr: 192.168.10.30:8848
namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
config:
server-addr: 192.168.10.30:8848
namespace: 527a087f-0737-4387-a93a-550cf93e3ff6
file-extension: yaml
shared-configs:
         - dataId: common.yaml
           refresh: true
       extension-configs:
         - dataId: extension.yaml
           refresh: true 

3.4.配置刷新

3.4.1.Environment对象

Environment可直接注入使用,或者通过EnvironmentAware获取使用

1、在hailtaxi-driver服务中进行实验,找到DriverController,添加如下代码

@Autowired
private Environment environment;

@GetMapping("/appName")
public String getAppName() {
    return environment.getProperty("app.name");
}

2、在nacos控制台找到hailtaxi-driver-dev.yaml配置文件,添加如下配置并发布

app:
  name: ts

3、启动访问:http://localhost:18081/driver/appName

4、在控制台更改app.name,不重启应用,再次访问查看结果

3.4.2.ConfigurationProperties注解

1、创建com.itheima.driver.properties.AppProperties

@ConfigurationProperties("app")
@Configuration
@Data
public class AppProperties {

    private String name;

}

2、修改DriverController#getAppName方法

@Autowired
private Environment environment;

@Autowired
private AppProperties appProperties;

@GetMapping("/appName")
public String getAppName() {
    return environment.getProperty("app.name") + "---" + appProperties.getName();
}

3、启动访问:http://localhost:18081/driver/appName

4、在控制台更改app.name,不重启应用,再次访问查看结果

3.4.3.Value注解+RefreshScope注解

1、修改DriverController#getAppName方法

@Autowired
private Environment environment;

@Autowired
private AppProperties appProperties;

@Value("${app.name:ts}")
private String appName;

@GetMapping("/appName")
public String getAppName() {
    return environment.getProperty("app.name") + "---" + appProperties.getName() +"---" + appName;
}

2、启动访问:http://localhost:18081/driver/appName

3、在控制台更改app.name,不重启应用,再次访问查看结果,发现@Value标注的属性不会自动更新

4、在对应DriverController标注@RefreshScope注解

@RefreshScope
public class DriverController {.......}

5、重新启动测试效果

3.5.配置灰度

1、将hailtaxi-driver项目打包,上传到服务器192.168.10.31,然后启动

java -Xms256m -Xmx512m -jar hailtaxi-driver-1.0-SNAPSHOT.jar
tips:启动前确保数据库连接地址是能从192.168.10.31机器进行连接的

2、在本机启动项目

3、在nacos控制台创建灰度配置,勾选Beta版本,选择灰度版本适用的IP,发布时发布Beta版本

4、测试访问本机:http://localhost:18081/driver/appName

​ 测试访问beta版本机器:http://192.168.10.31:18081/driver/appName

5、beta版本稳定后,点击发布变成最终版本,再次查看效果!!!

4.Nacos集群搭建

1、准备三台机器:192.168.10.30,192.168.10.31,192.168.10.32

2、准备数据源(直接使用30机器上的数据源即可),可参考本文档1.1节

3、下载并上传至三台服务器

4、三台服务器均解压至/op/nacos目录下

5、三台服务器均需编辑conf/application.properties文件,配置数据源

#*************** Config Module Related Configurations ***************#
### If use MySQL as datasource:
spring.datasource.platform=mysql
### Count of DB:
db.num=1
### Connect URL of DB:
db.url.0=jdbc:mysql://192.168.10.30:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root

tips:可在一台机器上操作完成后通过scp拷贝至另外的机器

scp application.properties root@192.168.10.32:/opt/nacos/nacos/conf/application.properties

6,三台机器均需编辑conf/cluster.conf,配置集群节点

192.168.10.30:8848
192.168.10.31:8848
192.168.10.32:8848

一个节点配置完成后可通过scp cluster.conf root@192.168.10.31:/opt/nacos/nacos/conf/cluster.conf拷贝至另外两个节点

7,在三个节点上分别以集群模式启动nacos

sh /opt/nacos/nacos/bin/startup.sh

8,可分别访问控制台:http://192.168.10.30:8848/nacos, http://192.168.10.31:8848/nacos, http://192.168.10.32:8848/nacos

9、选择nginx进行负载均衡,进行nginx的配置【在192.168.10.30安装nginx】

upstream nacos_cluster {
    server 192.168.10.30:8848;
    server 192.168.10.31:8848;
    server 192.168.10.32:8848;
}

server {
    listen      80;
    server_name hailtaxi.nacos.com;

    location  /nacos {
        proxy_pass  http://nacos_cluster;
    }
}

10、应用侧启动时直接配置nacos域名即可

spring:
  cloud:
    nacos:
      discovery:
        #server-addr: 192.168.10.30:8848
        server-addr: hailtaxi.nacos.com
      config:
        #server-addr: 192.168.10.30:8848
        server-addr: hailtaxi.nacos.com

11、基于本地host解决域名映射以便测试

192.168.10.30 hailtaxi.nacos.com
分类: 微服务 标签: Nacos

评论

全部评论 1

  1. hayaizo
    hayaizo
    Google Chrome MacOS
    [tv_腼腆][tv_腼腆][tv_腼腆]

目录