Spring Cloud Alibaba-Nacos使用和注册中心的原理

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: Spring Cloud Alibaba-Nacos使用和注册中心的原理

一、Nacos的使用


1、 正常使用http客户端调用


我们下订单的时候的调用:

image.png

1、讲解单独调用的图 2、然后运行一下这个demo 3、提出问题 4、进行改造

image.png

2、引入nacos


改造msb-stock


1、父pom引入依赖


<dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
复制代码


2、启动注解


@EnableDiscoveryClient
@SpringBootApplication
public class StockApplication {
    public static void main(String[] args) {
        SpringApplication.run(StockApplication.class);
    }
}
复制代码

3、增加配置

spring:
  cloud:
    nacos:
      discovery:
        service: msb-stock
        server-addr: localhost:8848
复制代码


改造msb-order


2、启动注解:


@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class);
    }
}
复制代码


3、增加配置


spring:
  cloud:
    nacos:
      discovery:
        service: msb-order
        server-addr: localhost:8848
复制代码


4、改造代码:


@GetMapping("/order/create")
    public String createOrder(Integer productId,Integer userId){
        String result = restTemplate.getForObject("http://msb-stock/stock/reduce//" + productId, String.class);
        return "下单成功";
    }
复制代码


5、现在我们访问msb-stock ,但是restTemplate并不知道怎样调用


@GetMapping("/order/create")
public String createOrder(Integer productId,Integer userId){
    // 此时restTemplate并不能识别msb-stock所以他不能进行调用
    // RestTempLate调用需要一个负载均衡器 1、 获取msb-stock对应服务列表 2、选择一个去调用
    // RestTemplate扩展点clientHttpRequestInterceptor
    // 我们有个组件ribbon 实现了这个扩展点 LoadBalancerInterceptor
  // 他做的事情就是将msb-stock:替换为:localhost:11001
    String result = restTemplate.getForObject("http://msb-stock/stock/reduce//" + productId, String.class);
    return "下单成功";
}
复制代码


分析一下LoadBalancerInterceptor的拦截器Interceptor


image.png


我们可以进行如下改造:


@Autowired
LoadBalancerClient loadBalancerClient;
@Bean
public RestTemplate restTemplate(){
    RestTemplate restTemplate = new RestTemplate();
    restTemplate.setInterceptors(Collections.singletonList(new LoadBalancerInterceptor(loadBalancerClient)));
    return restTemplate;
}
复制代码


当然我们也可以进行如下改造:直接加入注解@LoadBalance后面我们会讲


@LoadBalanced
@Bean
public RestTemplate restTemplate(){
    return new RestTemplate();
}
复制代码




二、Nacos注册中心的原理


image.png

首先服务在启动的时候会将数据注册到注册中心,这样就服务只要启动就可以对外提供服务了, 那么同时他也要维持一个心跳,心跳的意义就是某个服务挂掉,我肯定让注册中心知道,如果服务挂了还没有告诉注册中心,那么注册中心会引导客户端调用挂掉的服务体验就不好了,所以注册中心重要的概念就是和我们的服务维持一个心跳,来实时的监听我们服务的状态,当服务挂掉就会将其从服务列表中踢掉,


接下来肯定还有服务的调用者,他在调用服务之前一定会到注册中心拉取服务列表,获取可用的服务,并且还有一个定时任务来定时拉取服务列表,以保持服务列表的最新状态,其次还有更新的功能,这个功能就是当服务挂掉的时候通过心跳他会发现这服务不健康了,他会更新本地的服务注册表,同时将所有订阅这个注册表的服务进行更新。



相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
6天前
|
存储 Java 程序员
Spring 注册BeanPostProcessor 源码阅读
Spring 注册BeanPostProcessor 源码阅读
|
7天前
|
Java 开发者 Sentinel
Spring Cloud系列——使用Sentinel进行微服务保护
Spring Cloud系列——使用Sentinel进行微服务保护
25 5
|
7天前
|
Java 应用服务中间件 Spring
解析Spring Boot自动装配的原理与机制
解析Spring Boot自动装配的原理与机制
17 4
|
4天前
|
前端开发 Java 数据库连接
Spring的工作原理(一)简介
Spring的工作原理(一)简介
7 1
|
6天前
|
安全 Java 数据安全/隐私保护
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
在Spring Cloud中实现单点登录(Single Sign-On, SSO)
32 2
|
6天前
|
监控 Java Sentinel
Spring Cloud微服务架构
Spring Cloud微服务架构
25 1
|
19小时前
|
负载均衡 算法 Nacos
SpringCloud之LoadBalancer自定义负载均衡算法,基于nacos权重
ReactorLoadBalancer接口,实现自定义负载算法需要实现该接口,并实现choose逻辑,选取对应的节点。
10 0
|
22小时前
|
Nacos 数据安全/隐私保护
springCloud之nacos服务注册与发现、配置中心
springCloud之nacos服务注册与发现、配置中心
5 0
|
1天前
|
监控 Java API
4.服务网关之Spring Cloud Gateway
4.服务网关之Spring Cloud Gateway
13 0
|
4天前
|
XML Java 数据格式
Spring的工作原理(二)IOC-DI
Spring的工作原理(二)IOC-DI
11 0