SpringCloud Alibaba Nacos
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 Version | Spring Cloud Version | Spring Boot Versio |
---|---|---|
2.2.9.RELEASE | Spring Cloud Hoxton.SR12 | 2.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
来配置。目前只支持properties
和yaml
类型。
故在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 控制台创建dataId
为hailtaxi-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、切换profile
为test
,重启测试,【理论结果:启动报错,找不到数据库】
5、重新切换profile
为dev
保证正常!!
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
本文系作者 @hayaizo 原创发布在Hello World站点。未经许可,禁止转载。
全部评论 1
hayaizo
Google Chrome MacOS