7,springcloud+nacos
一、参考书籍
《Nacos架构&原理》
电子版下载地址:https://developer.aliyun.com/ebook/36
二、搭建nacos服务端
1,nacos官网下载
https://github.com/alibaba/nacos/releases
2,解压,修改配置文件,指定nacos连接的数据库配置
nacos/conf/application.properties
3,创建本地数据库,运行nacos初始化的sql
创建application.properties配置名称的数据库,运行nacos/conf/nacos-mysql.sql
4,运行nacos
先使用单机模式运行
cd nacos安装目录\nacos\bin
startup.cmd -m standalone
访问http://localhost:8848/nacos,查看运行效果
三、搭建nacos客户端
以springCloud + nacos为例
1,创建父工程
new project -> maven -> next ... -> finish
删除src目录,只保留pom.xml
指定maven-settings.xml:settings -> 搜索maven,修改相关配置
settings.xml示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<localRepository>E:\frr_repository_nacosdemo</localRepository>
<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
</settings>
父工程pom.xml示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>nacos-father</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<packaging>pom</packaging>
<modules>
<module>待会儿创建的子工程</module>
</modules>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<spring-cloud.version>2021.0.2</spring-cloud.version>
<spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!--Spring Cloud 相关依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Spring Cloud & Alibaba 相关依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2,创建子工程
右击父项目 -> new -> module -> spring initializr -> next ... -> finish
子工程pom.xml示例如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.example</groupId>
<artifactId>nacos-father</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>nacos-son-one</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>nacos-son-one</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<packaging>jar</packaging>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- Spring Cloud & Alibaba -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- 注册中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
</project>
3,创建nacos的namespace,在服务端页面
在nacos服务端页面配置的相关信息都是保存在数据库对应的表中。
4,客户端nacos配置
在src-main-resource下新建bootstrap.yml文件:
server:
port: 8989
spring:
application:
# 应用名称
name: nacos-son-one
profiles:
active: test
cloud:
nacos:
discovery:
server-addr: http://localhost:8848
namespace: e6f53299-e336-4583-b1b6-d09675d70b49
username: nacos
password: nacos
config:
server-addr: http://localhost:8848
namespace: e6f53299-e336-4583-b1b6-d09675d70b49
username: nacos
password: nacos
file-extension: yml
# 共享配置
shared-configs:
- application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
其中,discovery是注册中心相关配置,config是配置中心相关配置
四、测试客户端获取服务端配置
按照约定,在服务端创建客户端对应的配置,一般为:应用名称-active.yml
客户端编写代码,测试获取这个配置
1,为何无法动态获取配置
修改服务端配置的值,客户端无法动态刷新获取
是因为这个controller的bean已经生成,后续没有动作去刷新这个值。
2,动态获取配置
2.1,使用spring的@RefreshScope
2.2,使用nacos的相关注解
由于按网上的说法,@NacosValue注解似乎不能用于cloud项目,此处使用springboot项目为例:
重新新建一个springboot项目
五、服务注册和发现
关于nacos的openfeign工作原理:https://blog.csdn.net/qindalele/article/details/122444238
1,父工程下添加一个新模块
复制nacos-son-one,修改相关名字
2,消费者模块修改
六、集群
Nacos目录复制3份
每份都修改下端口;
配置下cluster.conf:
127.0.0.1:8845
127.0.0.1:8744
127.0.0.1:8847
每份bin目录下cmd启动
Nginx配置和启动
nacos客户端测试集群
两个模块都改成集群地址
测试关闭其中两个nacos后,也是可以正常获取配置的