第二次课:nacos服务注册与发现
分类: Java springboot 专栏: 分布式学习 标签: nacos的服务注册与发现
2023-06-11 21:02:43 751浏览
前言
我们学的是nacos的服务注册和发现,Eureka就暂时不学了,这个没nacos火了,感兴趣的小伙伴可以去自学了解下。
提一下消费者和提供者的概念。
上次课那种写法存在的问题分析:
//服务提供者的url是写死的 //如果服务提供者是集群模式 难道我们要自己写负载均衡的算法吗 String url= "http://localhost:81/user/"+order.getUserId(); User user = restTemplate.getForObject(url, User.class); order.setUser(user); return order;
认识nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
nacos的基本使用
下载nacos服务器
https://github.com/alibaba/nacos/releases
修改bin目录里面的startup.cmd文件 集群模式改为单机模式
set MODE="cluster" 改为下面的
set MODE="standalone"
启动后直接访问localhost:8848/nacos
默认的账号密码都是nacos
springboot使用nacos
依赖
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.7.RELEASE</version> </parent> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.7.RELEASE</version> </dependency>
配置文件
spring: cloud: nacos: discovery: server-addr: localhost:8848 ip: 127.0.0.1 application: name: user-service
开关注解
在微服务的启动类上加@EnableDiscoveryClient.表示是该微服务要注册到nacos的服务端
@EnableDiscoveryClient public class UserApp {
启动项目后,在nacos的控制台看到的效果如下
配置负载均衡
@Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); }
修改远程调用的url
之前是写死的localhost:81现在变成访问应用名
//服务提供者的url是写死的 //如果服务提供者是集群模式 难道我们要自己写负载均衡的算法吗 // String url= "http://localhost:81/user/"+order.getUserId(); String url= "http://user-service/user/"+order.getUserId(); User user = restTemplate.getForObject(url, User.class);
nacos两种健康检查模式
1.client上报模式
- 客户端通过心跳上报方式告知服务端(nacos注册中心)健康状态;
- 默认心跳间隔5秒;
- nacos会在超过15秒未收到心跳后将实例设置为不健康状态;healthy改为false
- 超过30秒将实例删除;
2 服务端主动检测
- nacos主动探知客户端健康状态,默认间隔为20秒;
- 健康检查失败后实例会被标记为不健康,不会被立即删除。
- ephemeral为true对应的是服务健康检查模式中的 client 模式,为false对应的是 server 模式。(临时实例和非临时实例,非临时实例不会被剔除)
环境隔离
在不同的命名空间下是相互隔离的,无法相互调用
nacos服务分级存储模型
集群和实例是不一样的
NacosRule负载均衡
演示消费者访问提供者集群的时候,优先选择本地集群
修改负载均衡的规则,假设本地集群有多个实例,多个实例是随机访问
user-service: #要做配置的微服务名称 ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
演示跨集群访问:本地集群全部挂掉的情况下会访问其他集群,并且会报警告
实例的权重设置
实际用途:可以做项目的平滑升级,先将要升级的微服务其中的一个实例权重设置成0 ,代码部署更新后再调高权重即可,用户是无感知的,就不用凌晨升级代码了。
好博客就要一起分享哦!分享海报
此处可发布评论
评论(3)展开评论