目录
1.9 Nacos注册中心
1.9.1 Nacos说明
Nacos是阿里巴巴的产品,现在是SpringCloud的一个组件,相比Eureka功能更加丰富
1.9.2 Nacos的启动(解压即安装)
1)解压,进入bin目录
2)在bin目录中,进入cmd模式
3)敲入:startup.cmd -m standalone
4)进入网站:http://127.0.0.1:8848/nacos,密码和账户均为nacos
1.9.3 配置
- 在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:
<!--nacos的管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.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>
- 修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:
spring:
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
- 小结:更改配置,就是依赖和配置文件的变更。
1.9.4 Nacos的服务分级存储模型
1)模型:服务-》集群-》实例
user-service-》北京集群/上海集群/深圳集群-》8081/8082/8083
3)服务实例设置集群
在启动前修改配置,然后启动,就会给一个服务设置
1.9.6 环境隔离namespace–配置功能
Nacos除了是注册中心外,还是一个配置中心。
- 这是什么功能,为什么需要再分组
在服务之上,还有一个分组,即为Group和Namespace,不是必须,其中Namespace下的分组目的是为了方便后续不同环境下的配置(例如开发环境dev,测试环境UAT,生产环境Prod)
- 如何进行配置
1)在nacos中创建新的命名空间,获取对应空间的id
2)在配置文件中添加命名空间的选取
cloud:
nacos:
server-addr:localhost:8848
discovery:
cluster-name: SH # 上海
namespace:492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID
- 小结
1)每一个namespace的id是唯一的
2)服务设置namespoace是要填写的是id,而不是名称
3)不同namespace下的服务是互相不可见的。
1.9.7 nacos注册中心的细节
- 服务提供者:把拥有的服务信息传输给注册中心登记
- 注册中心对服务提供者服务的更新
1)对于临时实例:服务提供者中的服务每隔一个心跳时间(30s)向注册中心信息更新
2)对于非临时实例:注册中心每次主动向服务提供者询问 - 服务消费者获取有效的服务列表(存在服务列表缓存)
1)对于临时实例:消费者定时向注册中心拉去服务列表
2)对弈非临时实例:实例的新增和删除会主动推送给服务消费者。()
1.9.8 Nacos与Eureka的对比
- 相同点
1)度支持服务注册和服务拉取
2)都支持服务提供者心跳方式做健康监测 - 不同点(Nacos额外功能)
1)临时实例心跳不正常会被提出,而非临时实例不会被剔除
2)Nacos支持服务列表变更的消息推送模式,更新更加快捷
图片:
1.10 Nacos配置管理
1.10.1 统一配置管理
- 在Nacos中添加配置文件(优先级高于本地配置)
- 在微服务中引入nacos的config依赖
<!--nacos配置管理依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
- 在userservice中的resource目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml:改文件能够配置nacos的地址,当前环境,服务名称和文件名侯准,决定程序启动去nacos读取那个文件。
spring:
application:
name: userservice # 服务名称
profiles:
active: dev #开发环境,这里是dev
cloud:
nacos:
server-addr: localhost:8848 # Nacos地址
config:
file-extension: yaml # 文件后缀名
- 做测试:配置能够成功实现
@RestController
@RequestMapping("/user")
public class UserController{
// 注入nacos中的配置属性
@Value("${pattern.dateformat}")
private String dateformat;
// 编写controller,通过日期格式化器来格式化现在时间并返回
@GetMapping("now")
public String now(){
return LocalDate.now().format(
DateTimeFormatter.ofPattern(dateformat, Locale.CHINA) );
}
1.10.2 配置热更新
配置文件变更后,微服务无需重启就能够感知,可以通过以下两种方式实现:
- 方式一:在@Value注入的变量所在类上添加注解@RefreshScope
- 使用@ConfigurationProperties注解
- 小结
1)不是所有配置都适合放到配置中心,维护起来比较麻烦
2)建议将一些关键参数,运行时需要调整的参数放到nacos配置中心,其他都放到本地配置中。
1.10.3 配置共享
当配置多个服务时,如果配置对象为一个,那么久有一个优先级。
nacos中的配置大于本地配置
当前环境的配置大于统一环境的配置
1.10.4 搭建Nacos集群
1)搭建沐浴SQL集群初始化数据表
2)下载解压nacos
3)修改集群配置(节点信息),数据库配置
4)分别启动多个nacos节点
5)nginx进行反向代理
参考文献
1)黑马程序员SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课