Nacos注册中心
Nacos是阿里巴巴开发的一个动态服务发现、配置管理和服务管理平台。它提供了服务注册、服务发现、配置管理和动态DNS等功能,能够帮助开发人员构建和管理微服务架构中的各个组件。Nacos支持多种语言和框架,可以与Spring Cloud、Dubbo等常见的微服务框架集成。
本机安装
- 下载安装包
- 解压
- 配置端口
- 启动
服务注册
- 在父工程添加spring-cloud-alibaba的管理依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.5.RELEASE</version>
<TYPE>pom</TYPE>
<scope>import</scope>
</dependency>
- 注释掉order-service和user-service中有关于的eureka依赖
- 添加nacos的客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 修改nacos客户端的配置文件
#指定服务地址
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务端地址
服务分级存储模型
概念:Nacos服务分级存储模型,一级是服务,例如userservice。二级是集群,例如杭州或者上海。三级是示例,例如杭州机房的某台部署了userservice的服务器。
讲解:https://www.cnblogs.com/zhangdashuaige/p/16877099.html
实现:
在application.yml中,添加属性cluster-name
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ #集群名称为HZ
NacosRule负载均衡
在配置文件中设置负载均衡的IRule为NacosRule,这个规则会优先寻找与自己同集群的服务。
本地集群找不到提供者,才会去其他集群寻找,并且会报出警告。确定可用实例列表之后,采用随机负载均衡挑选实例。
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
根据权重负载均衡,在Nacos控制台页面(默认本地ip:8848)可以调整实例的权重。**权重越低,被访问的概率就越低。**当权重被置为0时,负载均衡将不会再去调度该实例(服务)
环境隔离
namespace - Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离。
- namespace 用来做环境隔离
- 每个namespace都有唯一的id
- 不同namespace 下的服务不可见
实现:
- 再nacos控制台的左侧栏选择“命名空间”,选择新建命名空间,id可以自己设置或者自动填充
- 复制命名空间的id,在服务的配置文件中(application.yml/properties),添加属性
spring:
cloud:
nacos:
discovery:
namespace: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx #命名空间的id
临时实例和非临时实例
在检测健康状态时有区别:
- 临时实例:被动检测(自我发起),心跳模式。失效,在服务列表会被剔除
- 非临时实例:主动检测模式(检测中心发起)。失效,不会剔除
在实例的配置文件中更改属性。
spring:
cloud:
nacos:
discovery:
namespace: xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx #命名空间的id
ephemeral: false #是否是临时实例,默认true为临时实例
配置管理
统一配置管理
- 在Nacos中添加配置信息。打开Nacos控制台页面,选择【配置管理 - 列表】,点击在配置列表的页面右上角的【+】,添加新的配置。
- 填写配置表单的属性。
- Data ID:命名方式 —> [][][服务名称]-[profile环境].[后缀名] 例如:userservice-dev.yaml
- Group:默认即可
- 描述:自行填写
- 配置格式:目前支持yaml和properties
- 配置内容:填写核心配置,即可能会变化的配置。
- 完成配置
- 引入Nacos的配置管理客户端依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在userservice中的resource目录添加一个bootstrap.yml 文件,这个文件是引导文件,优先级高于application.yml。添加如下配置:(配置决定了Nacos去读取那个文件:userservices-dev.yaml)
spring:
application:
name: userservice #服务名称
profiles:
active: dev #开发环境 这里是dev
cloud:
nacos:
server-addr: localhost:8848 #Nacos地址
config:
file-extension: yaml #文件后缀名
配置热更新
两种方式:
- 通过@Value注解注入,结合@RefreshScope来刷新
- 在需要热更新的类加上注解@RefreshScope
- 通过@ConfigurationProperties注入,自动刷新
- 新建一个配置中心类,将需要配置文件注入的属性设置好。在类上加注解,@Component、@Data、@ConfigurationProperties(prefix = “配置文件中属性的前缀名”) 等。
注意事项:
- 不是所有配置都适合放到配置中心。维护成本高
- 建议将一些关键参数,需要运行时调整的参数放到nacos配置中心,一般都是自定义配置
多环境共享
- [服务名]-[环境].[后缀],环境配置
- [服务名].[后缀],默认配置,多环境共享
优先级:1 > 2 >本地配置文件
Nacos集群搭建
集群的搭建步骤:
-
搭建Mysql集群并初始化数据库表
-
下载解压nacos
-
修改集群配置(节点信息)、数据库配置
-
进入nacos的conf目录,修改cluster.conf.example,重命名为cluster.conf.
-
在cluster.conf添加内容,内容是集群其他机器的ip和端口:例如:127.0.0.1:8845
-
进入nacos的conf目录,修改application.properties文件:模板已经写好代码,但这是被注释掉的。需要取消注释,并且根据个人进行修改。如:数据源、url中的数据库名、用户名和密码
spring.datasource.platform=mysql db.num=1 db.url.0=jdbc:mysql://127.0.0.1:3306/数据库名?xxxxx db.user.0=root db.password.0=123456
-
-
分别启动多个nacos节点
startup.cmd
- nginx反向代理
安装好nginx,打开安装目录conf,修改nginx.conf文件。配置如下:
upstream nacos-cluster {
server 127.0.0.1:8845;
server 127.0.0.1:8846;
server 127.0.0.1:8847;
}
server {
listen 80;
server_name localhost;
location /nacos {
proxy_pass http://nacos-cluster;
}
}
启动nginx,在安装目录打开cmd
start nginx.exe
- 修改nacos地址
在idea配置文件bootstrap.yml修改server-addr的属性值
spring:
cloud:
nacos:
server-addr: localhost:80
Nacos与eureka的异同
相同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
不同点
- Nacos支持服务端主动检测提供者状态:
- 临时实例采用心跳模式
- 非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送,服务列表及时更新
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用Approach方式。