说明:Nacos是微服务框架中的注册中心技术,可用于管理、协调微服务之间的请求,可配合Feign技术,搭建一个完整的微服务框架。
一、安装&启动
可在官网(https://nacos.io/zh-cn/)提供的下载链接(https://github.com/alibaba/nacos/releases)中下载,下载后解压到一个没有中文、没有数字的路径下。打开目录的bin文件夹,在此目录下打开CMD,输入startup.cmd -m standalone
命令,启动Nacos,这种方式为单机模式、非集群模式启动,直接双击startup.exe为集群模式。
出现下面界面,为启动成功
此时,可以打开浏览器,输入:http://localhost:8848/nacos/,进入nacos平台,首次登录需要账号密码,都是nacos。
二、使用
在用户服务(8081端口)、订单服务(8082端口)的pom.xml文件中,添加注册依赖
<!--nacos配置管理依赖【注册】-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
用户服务配置(application.yml)
server:
port: 8081
# 1.数据源的配置
spring:
# 1.1设置服务名称
application:
name: userservice
# 1.2数据库配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_spring_cloud
username: root
password: 123456
# 1.3配置Nacos注册中心地址
cloud:
nacos:
discovery:
# 服务地址
server-add: localhost:8848
# 2.mybatis配置
mybatis:
configuration:
# 显示SQL日志配置
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 驼峰命名配置
map-underscore-to-camel-case: true
# 设置mapper.xml文件所在的路径
mapper-locations: classpath:mapper/*.xml
订单服务配置(application.yml)
server:
port: 8082
# 1.数据源的配置
spring:
# 1.1设置服务名称
application:
name: orderservice
# 1.2数据库配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_spring_cloud
username: root
password: 123456
# 1.3配置Nacos注册中心地址
cloud:
nacos:
discovery:
# 服务地址
server-add: localhost:8848
# 2.mybatis配置
mybatis:
configuration:
# 显示SQL日志配置
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# 驼峰命名配置
map-underscore-to-camel-case: true
# 设置mapper.xml文件所在的路径
mapper-locations: classpath:mapper/*.xml
启动这两个服务,打开nacos平台,可以看到这两个服务
(1)服务管理
在nacos服务器中,服务的结构如下图:
需要知道以下三点:
(1)微服务是根据服务名称区分的,名称相同视为同一个服务;
(1)不同命名空间之间是不能通信的;
(2)在集群环境中,nacos的负载均衡策略,会优先分配同一个集群下的服务;
命名空间
在nacos平台上,可手动新建命名空间
在程序中,配置文件中没有设置,默认会分配到public下,可通过下面的配置进行设置
spring:
cloud:
nacos:
discovery:
# 配置服务所在的命名空间
namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934
需要注意的是,命名空间的值是nacos上命名空间随机生成的ID
组
在程序中,通过下面的配置设置分组,不设置默认组名称为“DEFAULT_GROUP”;
spring:
cloud:
nacos:
discovery:
# 设置分组
group: group1
集群
在程序中,通过下面的配置设置集群,不设置默认集群名称为“DEFAULT”;
spring:
cloud:
nacos:
discovery:
# 设置集群
cluster-name: hz
配置效果
设置orderservice的命名空间,组,集群如下:
# 1.数据源的配置
spring:
# 1.1设置服务名称
application:
name: orderservice
# 1.2数据库配置
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/db_spring_cloud
username: root
password: 123456
# 1.3配置Nacos注册中心地址
cloud:
nacos:
discovery:
# 服务地址
server-add: localhost:8848
# 配置服务所在的命名空间
namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934
# 设置分组
group: group2
# 设置集群
cluster-name: hz
nacos平台
(不同命名空间之间不能通信)
(Load balancer does not have available server for client: userservice)
(2)配置管理
当微服务的数量非常多时,配置和维护服务的配置文件是一件工作量巨大的事情。可以使用nacos的配置中心,将本地相同的配置信息,写在nacos上(称为云端配置)。之后微服务需要使用直接关联就可以了,同样,需要修改时也只需要修改云端上的配置。
分类
云端配置分为如下四类:
-
带环境名称的配置,如orderservice-dev.yaml,表示开发环境下的订单服务配置;
-
不带环境名称的配置,如orderservice.yaml,表示订单服务配置;
-
扩展配置,如extend.yaml,表示扩展的配置,不特指为某一个服务的扩展;
-
共享配置,如logconfig.yaml,表示所有微服都可能使用到的配置;
配置
可在nacos平台上的,配置管理中添加配置,需要注意服务所在的命名空间
创建四种类型的配置
使用
在需要加载云端配置的服务中,添加nacos配置中心依赖
<!--nacos配置管理依赖【配置中心】-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
创建bootstrap.yml文件,这个文件会在程序读取application.yml配置文件之前读取,是application.yml的前置文件,可以将关联nacos上的配置文件内容写在这里。
bootstrap.yml文件内容,可以根据实际需要设置
# bootstrap.yml
spring:
cloud:
nacos:
discovery:
config:
server-addr: localhost:8848
namespace: 447cedef-498e-4200-a3bd-7a8ff51f4934
group: group2
# 不带环境的配置
file-extension: yaml
refresh-enabled: true
# 扩展配置(可配置多个)
extension-configs:
- data-id: extend1.yaml
group: DEFAULT_GROUP
refresh: true
- data-id: extend2.yaml
group: DEFAULT_GROUP
refresh: true
# 共享配置(可配置多个)
shared-configs:
- data-id: logconfig1.yaml
group: DEFAULT_GROUP
refresh: true
- data-id: logconfig2.yaml
group: DEFAULT_GROUP
refresh: true
# 激活带环境的配置文件
profiles:
active: dev
另外,需要注意的是,从云端拉取下来的配置,使用@Configuration注解使用的会实时更新,使用@Value注解使用的需要在类上额外加上@RefreshScope注解,才能同步更新;
(@Configuration注解读取的配置会实时同步)
(@Value注解读取的配置需要在类上面额外增加@RefreshScope注解)
配置优先级
当一个服务中,既有加载了云端配置文件,也有本地配置文件,当具有相同配置时,配置的优先级是:
- 云端配置 > 本地配置;
其中,云端配置:
- 带环境的配置 > 不带环境的配置 > 扩展配置 > 共享配置;
再其中,扩展配置、共享配置在bootstrap.yml中关联了多个时,使用规则是后来居上,即使用最后的配置
(当关联了多个扩展配置、共享配置,使用的是后面的)
(3)权重
在集群环境下,默认的负载均衡策略是随机访问,可以在nacos的服务详情中选择某一台服务器的权重,权重越高,被访问的概率越大。
(4)负载均衡
可以在配置文件中,设置集群环境下的负载均衡策略为Nacos规则
(bootstrap.yml文件)
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
总结
Nacos是阿里巴巴提供的一门注册中心技术,Nacos在微服务之上,提供了一系列管理、协调微服务的功能,如服务管理、配置管理、权重、负载均衡等。