中文文档:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
Nacos中文文档:https://nacos.io/zh-cn
微服务SpringClout Alibaba——Nacos注册中心、配置中心和Nacos集群(2)
微服务SpringClout Alibaba——Sentinel流控、熔断、降级(3)
微服务SpringClout Alibaba——Seata分布式事务(4)
目录
Nacos简介
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 的关键特性包括:
- 服务发现和服务健康监测:支持基于 DNS 和基于 RPC 的服务发现,对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。
- 动态配置服务:动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
- 动态DNS服务:动态 DNS 服务支持权重路由,让您更容易地实现中间层负载均衡、更灵活的路由策略、流量控制以及数据中心内网的简单DNS解析服务。
- 服务及其元数据管理:支持从微服务平台建设的视角管理数据中心的所有服务及元数据,包括管理服务的描述、生命周期、服务的静态依赖分析、服务的健康状态、服务的流量管理、路由及安全策略、服务的 SLA 以及最首要的 metrics 统计数据。
一、Nacos作为服务注册中心
1、安装并运行Nacos
我们先从官网上下载Nacos,官网推荐版本为:1.4.1,下载地址https://github.com/alibaba/nacos/releases/tag/1.4.1
环境:64 bit JDK 1.8+
下载完成后解压:tar -xvf nacos-server-1.4.1.tar.gz
进入nacos/bin目录下,执行如下命令运行Nacos:sh startup.sh -m standalone(单机模式运行)
运行成功后,访问http://localhost:8848/nacos可以查看Nacos的主页,默认账号密码都是nacos。
2、创建应用注册到Nacos
使用Spring Cloud Alibaba 的组件都需要在父pom.xml中添加如下的配置:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
在某块的pom.xml中添加如下的配置:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
修改bootstrap.properties文件,配置nacos相关信息:
server.port=9001
spring.application.name=nacos-payment
spring.cloud.nacos.discovery.server-addr=192.168.5.199:8848
management.endpoints.web.exposure.include=*
运行模块:
多起一个nacos-payment(9002)的服务:
3、建立一个消费服务,测试负载均衡
测试nacos就默认支持负载均衡:
修改消费服务的pom.xml文件:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
修改bootstrap.properties文件:
server.port=81
spring.application.name=nacos-order-consumer
spring.cloud.nacos.discovery.server-addr=192.168.5.199:8848
service-url.nacos-user-service=http://nacos-payment
使用RestTemplate调用,把RestTemplate加入到容器中:
@Configuration
public class ApplicationContextConfig {
//@LoadBalanced为轮询负载
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
抒写controller文件:
@RestController
public class OrderConsumerController {
@Resource
private RestTemplate restTemplate;
@Value("${service-url.nacos-user-service}")
private String serviceUrl;
@GetMapping("/consumer/nacos/payment/{id}")
public String getPayment(@PathVariable("id") Integer id){
return restTemplate.getForObject(serviceUrl+"/nacos/payment/"+id,String.class);
}
}
登录Nacos查看是否已经注册进去:
消费是否实现了负载均衡:http://localhost:81/consumer/nacos/payment/100
二、使用Nacos作为配置中心
1、代码
在pom.xml中添加相关的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- nacos-config-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--nacos-discovery-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
添加配置文件application.properties,配置测试环境(dev)
spring.profiles.active=dev
添加配置文件bootstrap.properties,主要是对Nacos的作为配置中心的功能进行配置
server.port=9003
spring.application.name=nacos-config-client
spring.cloud.nacos.discovery.server-addr=192.168.226.136:8848
spring.cloud.nacos.config.server-addr=192.168.226.136:8848
spring.cloud.nacos.config.file-extension=properties
创建一个controller进行测试
@RestController
@RefreshScope
public class NacosConfigController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/config/info")
public String getConfigInfo() {
return configInfo;
}
}
2、在Nacos添加配置
先说下Nacos配置文件dataId的构成
${prefix}-${spring.profiles.active}.${file-extension}
prefix
默认为spring.application.name
的值,也可以通过配置项spring.cloud.nacos.config.prefix
来配置。spring.profiles.active
即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当spring.profiles.active
为空时,对应的连接符-
也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}
file-exetension
为配置内容的数据格式,可以通过配置项spring.cloud.nacos.config.file-extension
来配置。目前只支持properties
和yaml
类型
比如这里Nacos的dataId就是:
nacos-config-client-dev.properties
填写配置示意图
启动项目,访问:http://localhost:9003/config/info
3、Nacos的动态刷新配置
当我们增加@RefreshScope时,修改Nacos中的配置信息,再次调用查看配置的接口,就会发现配置已经刷新,Nacos和Consul一样都支持动态刷新配置。当我们在Nacos页面上修改配置并发布后,应用会刷新配置并打印如下信息
2021-03-10 01:05:14.881 INFO 17468 --- [68.226.136_8848] b.c.PropertySourceBootstrapConfiguration : Located property source: [BootstrapPropertySource {name='bootstrapProperties-nacos-config-client-dev.properties'}, BootstrapPropertySource {name='bootstrapProperties-nacos-config-client.properties'}]
三、Nacos集群和持久化配置
官网推荐的集群部署的方式:
通过官网推荐的结构图最少需要以下配置集群,nginx+3Nacos+mysql
Nacos在默认的情况下,使用的是内嵌的数据库derby;
当我们使用集群的方式时,就必须对数据进行持久化,官方在Nacos的0.7版本后加入了Mysql数据库进行持久化,在生成环境,Mysql要使用主备的模式、以及集群的数据库。
1、进入Nacos的文件夹在Mysql执行脚本,/usr/local/nacos/conf,在数据库中执行nacos-mysql.sql脚本
2、配置Nacos数据源,即/usr/local/nacos/conf下的application.properties文件,增加Mysql数据的相关信息,使其从内嵌的数据库derby转为Mysql数据库
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://11.162.196.16:3306/nacos_devtest?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=nacos_devtest
db.password=youdontknow
3、Nacos集群要配置Nacos的ip地址
cd /usr/local/nacos/conf
cp cluster.conf.example cluster.conf
vim cluster.conf
填写Nacos集群地址,没台机器都要配置
192.168.226.134:8848
192.168.226.135:8848
192.168.226.136:8848
4、启动Nacos,进入/usr/local/nacos/bin执行:sh startup.sh
5、通过执行nginx进行反向代理
upstream cluster{
server 192.168.226.134:8848;
server 192.168.226.135:8848;
server 192.168.226.136:8848;
}
location / {
#root html;
#index index.html index.htm;
proxy_pass http://cluster;
}