1.为什么使用选择nacos
nacos在springcloud体系中作为注册中心与配置中心使用。相当于eureka与apollo的功能。
一个老生常谈的问题nacos和eureka区别,下图是楼主在网上查找到。
但是在楼主实际应用中 还有以下有点特别称道:
- nacos有配置功能,相对于楼主之前的eureka+apollo 这无疑大大的简化了系统的复杂性。
- nacos使用了数据库进行管理数据,使在处理数据时心里更舒服了。
- nacos拥有namespace和gourp的概念,可以隔离同名的服务。这样在多人起后端服务时,可以注册到一个nacos服务 隔离开就可以了。
2.Nacos快速开始
这个快速开始手册是帮忙您快速在您的电脑上,下载、安装并使用 Nacos。
1.版本选择
您可以在Nacos的release notes及博客中找到每个版本支持的功能的介绍,当前推荐的稳定版本为1.4.2或2.0.1。
2.预备环境准备
Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:
- 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
- 64 bit JDK 1.8+;下载 & 配置。
- Maven 3.2.x+;下载 & 配置。
3.下载源码或者安装包
你可以通过源码和发行包两种方式来获取 Nacos。
1.从 Github 上下载源码方式
git clone https://github.com/alibaba/nacos.git
cd nacos/
mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
ls -al distribution/target/
// change the $version to your actual path
cd distribution/target/nacos-server-$version/nacos/bin
2.下载编译后压缩包方式
您可以从 最新稳定版本 下载 nacos-server-$version.zip
包。
unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz
cd nacos/bin
4.启动服务器
1.Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
sh startup.sh -m standalone
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
bash startup.sh -m standalone
2.Windows
启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
当idea使用源码单机启动时需要以下配置
-Dnacos.standalone=true
5.单机时使用数据库
当不添加配置时,默认是使用内存保存信息,我们可以添加数据库配置,使数据保存在数据库内.
暂时官方只支持mysql,其他数据库需要自己手动修改。
1.源码启动
使用源码idea启动需要修改以下文件的以下位置
2.已经打包的jar包
nacos\conf\application.properties修改数据库配置
6.启动成功
出现以下图案代表启动成功,看出来模式为单机模式,路径为Console输出,访问即可
对于官网集群搭建的要求,是要求大企业的,个人认为小公司如果没有条件可以不必满足,也可以正常启动。但是有条件还是建议上集群。
3.springboot注册进入nacos
1.修改pom文件
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
在pom.xml文件中最好选择合理的版本,否则会报各种各样的错 。
版本可以根据官方文档选择:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明
同时为了保证版本相同建议再父工程中加入以下配置,意思是子工程groupid为org.springframework.cloud,com.alibaba.cloud,org.springframework.boot的都依赖父工程版本
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<!--maven不支持多继承,使用import来依赖管理配置-->
<scope>import</scope>
</dependency>
<!-- SpringCloud 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>
<!-- SpringBoot 依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2.修改bootstrap.xml
这里一定要使用bootstrap.yml而不是application.yml,因为bootstrap.yml运行先于后者,如果使用application.yml可能会出现即使有注册的地址,还是去连接localhost:8848的情况。
spring:
application:
name: systemp
# 数据源配置
cloud:
nacos:
discovery:
# 服务注册地址
server-addr: 192.168.xx.x:8848
#命名空间
namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
#分组
group: xxx
config:
# 配置中心地址
server-addr: 192.168.xx.xx:8848
# 配置文件格式
file-extension: yml
#命名空间
namespace: b80f0aa4-3af2-a6e3-c6fda24c2bc0
#分组
group: xxx
可以为服务指定namespace和group,在一个namespace和group中的服务只能获取同namespace和group中的服务,这样可以同时配置dev和pro环境。获取小组内的小伙伴都可以连接一个nacos服务,而不是像eureka 一人启动一个。
1.新建命名空间
配置文件中namespace是需要建立的,方式如图。
配置文件中是命名空间id
2.新建分组
分组不用在nacos中新建 ,直接编写即可。
3.修改启动类
在spring boot启动类上加入@EnableDiscoveryClient注解即可。
@EnableDiscoveryClient
@SpringBootApplication
public class GetwayApplication {
public static void main(String[] args) {
//去除nacos日志
System.setProperty("nacos.logging.default.config.enabled", "false");
SpringApplication.run(GetwayApplication.class, args);
}
}
注意:如果使用了logback作为日志
System.setProperty("nacos.logging.default.config.enabled", "false");
需要添加 否则会因为日志命名报错
4.启动
然后启动服务,访问ip:8848/nacos可以验证是否注册成功。
同时也发布到了指定的namespace和groupid。
4.配置中心
配置中心:bootstrap.yml中的配置可以通过nacos配置修改,同时大部门不需要重启服务就可以生效。
由于引入了nacos,楼主不再使用apollo配置中心。变更原因如下
- 由于架构变更为springcloud alibaba,nacos可以承担起eureka+apollo的功能。
- 可以降低系统的复杂性。方便运维。
- 对配置中心的需求仅有动态配置,无更细腻话的权限和灰度发布等功能要求。
1.实战整合springboot
建议启动类使用bootstrap.yml
1.新建nacos配置
请注意选择合适命名空间
配置解释如下:
- Data ID的命名格式如下:{spring.application.name}-{spring.profiles.active}.{文件类型},也就是系统名称+dev/pro.yaml(一般情况)见下图。
如果没有spring.profiles.active会省略“-”与“spring.profiles.active”
-
group:其中需要注意namespace与group需要与nacos中配置对应(这两个概念上文有介绍),否则会获取不到配置。
-
配置格式:这里因为使用了bootstrap.yml所以选择上述配置。
-
配置内容:需要在nacos中更改的配置项。
2.配置成功
如果成功:
切记namespace与group一定要匹配。
同时可以监控到那台服务使用该配置。
3.客户端接口编写
@RestController
@RefreshScope
public class DemoController {
@Value("${nacostest.demo}")
private String demo;
@GetMapping("/testConfig")
public String testConfig() {
return demo;
}
}
@RefreshScope不要少写!否则报错!
改变配置多次调用接口,可以发现返回值发生变化。