分布式学习(一)

  1. 添加依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.hhm</groupId>
    <artifactId>nacosServer</artifactId>
    <version>0.0.1-SNAPSHOT</version>
  </parent>
  <artifactId>nacos-provide1</artifactId>
  
  <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
		    <groupId>com.alibaba.cloud</groupId>
		    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
		    <version>2.1.2.RELEASE</version>
		</dependency>


        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
            <version>2.9.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

查看依赖树,发现nacos-discovery包含了ribbon
在这里插入图片描述

  1. 使用
    在这里插入图片描述
    原理分析:
    添加了@LoadBalanced注解后,调用服务时ribbon会通过拦截器根据服务名去注册中心(nacos)拉取服务列表到本机缓存起来,然后ribbon会在相应的策略下进行服务的调用,实现负载均衡;@LoadBalanced来让RestTemplate具备客户端负载功能

  2. 添加机器不需要重启,nacos会自动感知并添加服务
            原理分析:当添加新的一个服务时,会主动注册到服务中心,那服务调用方时如何感知到有新的服务添加进来了呢?原理是:服务的调用方因为集成了ribbon,而ribbon有个定时任务,会定时地去注册中心拉取服务并缓存到本机,所以能进行服务的调用而不需要重新启动nacos(nginx需要重启)

  3. 当服务死掉的时候,nacos是如何感知到服务不可用的并从服务列表移除的呢?
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    这个依赖引入时,在系统启动的时候,会启动一个定时任务,定时地向注册中心发送心跳,但一个服务死掉的时候,无法发送心跳;注册中心(nacos)等到一段时间依然无法接受到心跳时,会认为该服务已经不可用,然后会从服务列表中将该服务信息移除掉;服务调用方通过ribbon的定时器去拉取服务时,就拉取不到死掉的服务,并把最新拉取的服务覆盖上一次拉取到的服务并缓存到本机;这样会导致一个问题的存在:因为服务死掉时,并不是能立刻感知到的,需要等待一段时间,那就是在等待的这段时间,有客户端调用了死掉的服务怎么办?没问题,ribbon会有重试策略,当访问服务一不可用时,通过重试策略访问服务二,以此类推,而不是直接返回失败信息,实现高可用;当然,当所有的机器都坏掉时,肯定会返回错误信息的

  4. nacos其实就是一个web服务,对外提供了很多的http请求接口
    例如:进行服务注册的时候,服务方调用了nacos提供的/nacos/v1/ns/instance接口,要求服务传递ip,端口号等信息过来,因此在nacos服务列表上能看到对应的信息

  5. 使用openfeign组件,实现简单的服务调用、
    当没有使用该组件时,我们通过以下方式进行服务的调用
    在这里插入图片描述
    这样不符合我们的习惯,我们平时调用server的时候,都是直接service.getMethod()即可,openfeign组件就是为此诞生;

引入依赖:

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

在启动类添加注解:@EnableFeignClients
在这里插入图片描述
创建接口:
在这里插入图片描述
调用:
在这里插入图片描述
直接通过provide.get()即可实现远程服务的调用!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值