springcloud alibaba 组件
- 一、nacos
- Spring Cloud Nacos
- 1. 什么是 Nacos?
- 2. 下载地址:
- 搭建一个springcloud alibaba 微服务
- 使用nacos实现eureka-config的统一配置问题
- nacos与eureke的比较
springCloud alibaba 地址 :
https://spring.io/projects/spring-cloud-alibaba
一、nacos
Spring Cloud Nacos
官网:https://nacos.io/zh-cn/index.html
1. 什么是 Nacos?
服务(Service)是 Nacos 世界的一等公民。Nacos 支持几乎所有主流类型的“服务”的发现、配置和管理
相当与springcloud netflix中的 eureka-server 注册中心
2. 下载地址:
https:///alibaba/nacos/releases
我选择的是 nacos-server-1.3.1.zip 版本 安装是在 Windows
下载解压后进入nacos文件夹,展示目录
然后在bin目录下 输入cmd 进入管理员的doc命令
startup.cmd -m standalone
出现这个图案就启动成功了
输入地址 :
http://127.0.0.1:8848/nacos/index.html
默认账号密码都是nacos
登录成功后显示
表示服务的注册中心就搭建成功了!!!!!
搭建一个springcloud alibaba 微服务
选择 版本 管理
<dependencyManagement>
<dependencies>
<!--spring boot 2.2.2-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba 2.1.0.RELEASE-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
新建nacos-client 模块,选择maven工程
在nacos-client pom文件下 引入依赖
<dependencies>
<!-- 注册中心 nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--web + actuator-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
然后在进行建yml文件 如下图
bootstrap.yml文件:
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 # 注册中心
config:
server-addr: localhost:8848 # 配置中心
file-extension: yaml # 这里指定的文件格式需要和nacos上新建的配置文件后缀相同,否则读不到
新建一个启动类
/**
* @author fyb
* @version 1.0
* @date 2021/3/22 12:58
*/
@SpringBootApplication
@EnableDiscoveryClient //这个就是将这个服务注册到nacos-server 中
public class NacosConfigClientMain3377 {
public static void main(String[] args) {
SpringApplication.run(NacosConfigClientMain3377.class, args);
}
}
然后启动NacosConfigClientMain3377
在nacos服务端 查看:
nacos-config-client就注册进我们的nacos-server服务端
使用nacos实现eureka-config的统一配置问题
导入依赖 :
我在前面已经导入过了
然后在bootstarp.yml文件中
在配置文件中新建application.yml文件
spring:
profiles:
active: dev # 开发环境
# active: test # 测试环境
然后写一个controller文件 进行测试
/**
* @author 用户: fyb
* @description class: ConfigClientController
* @date 时间: 2021/2/23 21:23
*/
@RestController
@RefreshScope //nacos 动态刷新 配置自动更新
public class ConfigClientController {
@Value("${}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
@RefreshScope 实现动态刷新
然后在重新运行
以前是在getee或者guthub,gitlab
现在是在nacos-server的服务端
这个Data ID官方是有要求的
所以我这边是
# ${spring.application.name}-${spring.profile.active}.${spring.cloud.nacos.config.file-extension}
如图
填写数据
点击发布后,访问接口
http://localhost:3377/config/info
这个就可以实现自动同步数据
但是呢,只要重启了nacos-server端时,你会发现你写的配置文件的数据就不见了。
这个时候就涉及到持久层的问题
nocos就提供了一种方式 ,使用mysql来进行持久化,
在我们的conf目录下有多个文件
打开nacos-mysql.sql
里面提供了表结构
在自己的mysql中新建一个数据库
然后在里面执行mysql就生成了如下图
然后在conf文件夹下打开
application.properties
在这个文件里面填写自己mysql中的url 账号,密码
然后保存
再次 重启nacos 在配置管理 里面填写配置文件
写完后在MySQL数据库中config_info
看 如图 :
然后再次重启nacos 配置管理 发现实现了 持久化 。
nacos与eureke的比较
Spring Cloud Nacos
优点:
1)开箱即用,适用于dubbo,spring cloud等
2)AP模型,数据最终一致性
3)注册中心,配置中心二合一(二合一也不一定是优点),提供控制台管理
4)纯国产,各种有中文文档,久经双十一考验
缺点:
1)刚刚开源不久,社区热度不够,依然存在bug
Spring Cloud Eureka:
优点:
1)Spring Cloud 官方推荐
2)AP模型,数据最终一致性
3)开箱即用,具有控制台管理
缺点:
1)客户端注册服务上报所有信息,节点多的情况下,网络,服务端压力过大,且浪费内存
2)客户端更新服务信息通过简单的轮询机制,当服务数量巨大时,服务器压力过大。
3)集群伸缩性不强,服务端集群通过广播式的复制,增加服务器压力
4)Eureka2.0 闭源(Spring Cloud最新版本还是使用的1.X版本的Eureka)
示例地址:
https://gitee.com/fengyabin/springcloud_alibaba.git