手把手教你搭建SpringCloudAlibaba微服务架构——Nacos配置中心的搭建
目录
@
环境介绍
我用的是Win10系统,为了演示方便,所以就直接把nacos搭在了本地,配置源暂时先用Nacos内嵌的,后面搭建nacos集群时会改用mysql来存储nacos配置信息。
Java环境
nacos是运行在Java环境上的,所以必须要有java环境
Maven环境
maven环境主要用来将nacos源码编译为可执行文件(jar),为什么需要maven环境呢?是因为我傻乎乎的从github下载的是源码包,所以需要通过mvn命令手动编译一下。(我建议直接下载安装包,当然如果你要修改nacos源码的话就当我没说。。)
下载Nacos
源码包虽然需要手动编译,但是源码包非常小,大概只有4M左右,不像安装包那样有70多M,所以如果你网速不是很好的话,下载源码包手动编译其实也是一个不错的选择
Nacos仓库地址:https://github.com/alibaba/nacos/releases(安装包龟速下载中。。。)
源码包—百度网盘:https://pan.baidu.com/s/1qCL7iRbT1gXxjsU7mkLuag 提取码:49ke
安装包—百度网盘:https://pan.baidu.com/s/1z3mPXFStyIJAoECl6eut1g 提取码:l5yc
编译源码包
源码包下载完成并解压后的目录是这个样子。如果你下载的是安装包,那么可以跳过这一个步骤
进入到nacos-1.4.0的根目录下执行 mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U 进行编译
这个命令是我从nacos官网上扒拉下来的:https://nacos.io/en-us/docs/quick-start.html
编译完成后可以看到一堆绿油油的SUCCESS和\nacos-1.4.0\distribution下多出了一个target目录。
然后进入target\nacos-server-1.4.0\nacos目录,接来下的步骤就跟安装包的步骤是一样的了。
安装单机Nacos并启动
安装包下载完成并解压后的目录如下
然后进入bin目录,可以看到以下的几个脚本
我使用的windows系统,所以要通过startup.cmd这个脚本来启动,这个启动脚本默认是集群模式,所以我还需要编辑一下改为单机模式,当然如果你不修改启动脚本而是在启动时加-m standalone参数手动指定也是可以的,但是由于我比较懒,就直接修改脚本了。
脚本修改完成后双击startup.cmd就可以启动Nacos了
温馨提示1:单机启动时第一行会提示"nacos is starting with standalone"",需要按一下回车键确认一下哦
温馨提示2:通过这个这个脚本启动的nacos不是后台进程,所以记得不要关闭这个窗口
接着就可以去浏览器访问了,http://localhost:8848出现如下界面就代表nacos已经成功启动了。
然后输入nacos默认的账号密码nacos/nacos就可以进入nacos的控制台了
搭建Nacos配置中心
项目结构
父工程pom文件
<?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>demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
</parent>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR3</spring-cloud.version>
<spring-boot.version>2.2.5.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<spring-cloud-sentinel.version>2.1.1.RELEASE</spring-cloud-sentinel.version>
<sentinel-datasource-nacos.version>1.7.1</sentinel-datasource-nacos.version>
</properties>
<modules>
<module>pay-service</module>
</modules>
<dependencyManagement>
<dependencies>
<!--Nacos Config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-alibaba.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>maven-ali</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
</repository>
</repositories>
</project>
pay-service工程pom文件
<?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>demo</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.example</groupId>
<artifactId>pay-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>pay-service</name>
<description>Demo project for Spring Boot</description>
<dependencies>
<!--Nacos Config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--Spring Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--SpringBoot Test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
application.yml
server:
port: 8089
spring:
application:
name: pay-service
cloud:
nacos:
config:
server-addr: localhost:8848
profiles:
active: develop
动态刷新配置
然后先添加一个@RestController演示效果( 我是真的懒,Controller都懒得写 直接怼在启动类里面算了),需要关注的是@RefreshScope和@Value这两个SpringCloud原生注解
@SpringBootApplication
@RefreshScope
@RestController
public class PayServiceApplication {
@Value("${cache:default}")
private String cache;
@GetMapping(value = "/hello")
public String show()
{
return cache;
}
public static void main(String[] args) {
SpringApplication.run(PayServiceApplication.class, args);
}
}
然后启动项目并访问http://localhost:8089/hello可以看到返回了cache的默认值:default。
然后再登录nacos的控制台添加配置信息,并点击右下角的发布按钮
这里需要说明一点:Nacos是通过Namespace+Group+DataID这三个要素定位到指定的配置文件的,并且DataId也具有指定的规则
详情请参考官方文档:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
然后再次访问http://localhost:8089/hello,可以看到cache的值已经被刷新了
最后说一点,按照dataID的规则假如我配置了spring.profiles.active这个属性时,那么我对应的DataID应该是pay-service-develop.properties。但是我发现当pay-service-develop.properties配置文件不存在时,那么nacos也会取pay-service.properties中的配置信息。
代码已上传至github: https://github.com/chhnhcqjava/SpringCloudAlibabaDemo_1.git