第二次课:nacos服务注册与发现
分类: Java springboot 专栏: 分布式学习 标签: nacos的服务注册与发现
2023-06-11 21:02:43 1420浏览
前言
我们学的是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)展开评论
您可能感兴趣的博客

新业务
springboot学习
ssm框架课
vue学习
【带小白】java基础速成