Spring Cloud
从G
版本开始Netflix
的很多东西就进入了维护模式,也就是不再开发新的组件了。
SpringCloud Alibaba
可以替代之前Netflix
公司的很多技术,而且他都有一套非常好用的Web
管理界面,使用起来会更加的方便了。
官方的Readme将主要功能介绍的很详细,官方的文档也很简洁。
Spring Cloud Alibaba
使用之前应该去官网看应该导入什么包,下面代码都是取自官网,并加上自己的更改
<dependencies>
<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>
Nacos做服务注册
其实功能就类似于Eureka + Config + Bus
的组合,点击查看官方手册
安装
到官方Github
的Release
中去下载发布包,大概50来兆,如果下载太慢,使用Aria2c
就好了
解压完成后直接使用bin
目录中的startup
启动就可以了
默认端口8848
,默认是不需要登录的,可以通过配置文件使其需要登录
将Provider注册到Nacos
不做过多解释了,官方Provider
<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>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
server:
port: 8001
spring:
application:
name: nacos-service-provider
cloud:
nacos:
server-addr: localhost:8848
management:
endpoints:
web:
exposure:
include: "*"
@RestController
public class EchoController {
@Value("${server.port}")
private String port;
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return port + ": Hello Nacos Discovery " + string;
}
}
@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication {
public static void main(String[] args) {
SpringApplication.run(NacosProviderDemoApplication.class, args);
}
}
启动后,可以看到Nacos
中注册了一个服务,就可以了。
将Consumer注册到Nacos
这个代码就不在这里粘贴了,和上面的配置基本上一样,因为Nacos
包里面集成了Ribbon
,所以Nacos
天生就是有负载均衡的,可以使用@LoadBalanced
注解来启用这个功能。
可以启动两个Provider
和一个Consumer
来测试这个默认的负载均衡。
再谈注册中心的对比
注册中心名称 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低 |
Zookeeper | CP | 不支持 | 中 |
Consul | CP | 支持 | 高 |
Nacos | AP/CP可切换 | 支持 | 高 |
Nacos做服务配置中心
不同于Spring Cloud Config
,配置直接存储在Nacos
中。
基础配置使用方法
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
以下配置文件是bootstrap.yaml
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
application.yaml
spring:
profiles:
active: dev
@RefreshScope
@RestController
public class ConfigController {
@Value("${config.info}")
private String info;
@GetMapping("config")
public String config() {
return info;
}
}
@RefreshScope
注解也是SpringCloudConfig
中的注解,作用都是动态刷新配置。
接下来需要在Nacos
界面中编辑配置文件就好了,需要填写DataId
,格式如下:
${prefix}-${spring.profile.active}.${file-extension}
然后启动项目就可以发现配置生效了,通过Nacos Config
功能,不像Spring Cloud Config
那样刷新配置那么麻烦,改了配置文件就会自动刷新。
分类配置使用方法
范围:namespace
> group
> dataid
namespace
默认为public
group
默认为DEFAULT
cluster
默认为DEFAULT
作用是区分部署环境,给微服务分组,给微服务分地域,主要是为了异地微服务调用提供方便的,通过范围的划分可以让微服务找到最近的微服务进行调用。
DataId
的配置
上面已经用过了其实,因为DataId
中需要spring.profiles.active
配置,所以只要更改这个配置,就可以切换多环境下的配置了。
Group
的配置
在原来的基础上添加group
就行
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
group: TEST_GROUP
namespace
配置
新建一个namespace
的时候会默认分配一个id
,也可以手动填写id
,只要将这个id
配置到配置文件中即可
spring:
cloud:
nacos:
config:
server-addr: localhost:8848
file-extension: yaml
group: TEST_GROUP
namespace: 10c59270-985c-45f0-987d-0ff39cc18eb3
Nacos持久化配置
Nacos
自带了Derby
数据库是一个嵌入式数据库,为了搭建集群让好几个Nacos
都统一数据,所以需要使用MySQL
,Nacos
也只支持MySQL
。
在conf
目录下面有一个叫做nacos-mysql.sql
的文件,这就是他出厂默认的MySQL
脚本,可以运行这个脚本来创建几张表,库名叫做nacos_config
。
创建表完成后还是在conf
目录下,找到application.properties
根据注释修改数据库为MySQL
,当前不支持MySQL8+
。
Nacos集群配置
Nacos
是支持集群配置的,使用Nginx
负载到每个集群的节点,Nacos
的每个节点都用同一个数据库,就可以实现Nacos
的集群了。
为了珍惜生命,我用了Docker
来做的集群,官方有详细的解释,网上文档也特别多,就不记录了。