第二次课:nacos服务注册与发现

飞一样的编程
飞一样的编程
擅长邻域:Java,MySQL,Linux,nginx,springboot,mongodb,微信小程序,vue

分类: Java springboot 专栏: 分布式学习 标签: nacos的服务注册与发现

2023-06-11 21:02:43 751浏览

nacos的服务注册与发现

前言

我们学的是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 模式。(临时实例和非临时实例,非临时实例不会被剔除)

image.png



环境隔离

在不同的命名空间下是相互隔离的,无法相互调用

nacos服务分级存储模型

集群和实例是不一样的

NacosRule负载均衡

演示消费者访问提供者集群的时候,优先选择本地集群

修改负载均衡的规则,假设本地集群有多个实例,多个实例是随机访问

user-service: #要做配置的微服务名称
	ribbon:
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

演示跨集群访问:本地集群全部挂掉的情况下会访问其他集群,并且会报警告

实例的权重设置

实际用途:可以做项目的平滑升级,先将要升级的微服务其中的一个实例权重设置成0 ,代码部署更新后再调高权重即可,用户是无感知的,就不用凌晨升级代码了。


好博客就要一起分享哦!分享海报

此处可发布评论

评论(3展开评论

蓝色妖姬 能力:10

2023-06-12 16:50:53

已完成
蓝色妖姬 能力:10

2023-06-12 15:54:08

学习中
蓝色妖姬 能力:10

2023-06-12 11:44:58

预习中
点击查看更多评论

展开评论

您可能感兴趣的博客

客服QQ 1913284695