• SpringCloud Alibaba组件入门全方面汇总(上):注册中心-nacos、负载均衡-ribbon、远程调用-feign


    在这里插入图片描述

    Nacos

    在这里插入图片描述

    概念:Nacos是阿里巴巴推出的一款新开源项目,它是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos致力于帮助用户发现、配置和管理微服务,它提供了一组简单易用的特性集,包括动态服务发现、服务配置、服务元数据及流量管理,帮助用户更敏捷和容易地构建、交付和管理微服务平台。Nacos是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。

    在定位上,Nacos是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。它提供了强大的功能和简单易用的特性集,帮助用户快速实现动态服务发现、服务配置、服务元数据及流量管理。

    在原理上,Nacos通过注册中心实现服务的注册与发现,通过配置管理模块实现配置的动态获取和更新,通过服务管理模块实现服务的元数据管理和流量管理。

    在使用上,Nacos可以与Spring, Spring Boot, Spring Cloud等框架集成,可以代替Spring Cloud Eureka和Spring Cloud Config。
    要在 Nacos 中使用注册中心功能,需要按照以下步骤进行:

    1. 在项目的 pom.xml 文件中添加 Nacos 的相关依赖。
    2. 在项目的 application.yml 或 application.properties 文件中配置 Nacos 注册中心的相关参数,例如 Nacos 的地址、端口、用户名、密码等。
    3. 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用服务注册和发现功能。
    4. 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
    5. 在项目的客户端类中添加 @RibbonClient 和 @FeignClient 注解来声明客户端和调用服务。

    Ribbon

    概念:Ribbon是一个基于Netflix的开源项目,它是一个客户端的负载均衡工具。Ribbon提供了完善的配置,例如超时、重试等,并且支持多种负载均衡算法,例如轮询、随机、最少连接算法等。

    在概念上,负载均衡是指将客户端的请求分配到多个服务器上,以实现高可用性和高性能。Ribbon作为负载均衡器,通过客户端向Ribbon发送请求,然后Ribbon根据负载均衡算法选择一个服务器,并将请求转发给该服务器。如果该服务器无法响应请求,Ribbon会自动选择另一个服务器,并将请求转发给它。

    在定位上,Ribbon是Spring Cloud生态系统中的一部分,它主要用于客户端的负载均衡。

    在原理上,Ribbon的工作原理是基于权重的轮询算法。它将所有服务器分配一个权重值,并根据权重值来决定每个服务器被选择的概率。例如,如果服务器A的权重值为2,服务器B的权重值为1,那么在轮询过程中,服务器A被选择的概率是2/3,服务器B被选择的概率是1/3。此外,Ribbon还支持多种负载均衡算法,例如随机算法、最少连接算法、IP哈希算法等。这些算法可以根据不同的场景选择合适的负载均衡策略,以提高系统的性能和可用性。

    在使用上,Ribbon可以与Spring Cloud集成,通过合理地配置权重和选择合适的负载均衡算法,可以帮助我们实现高可用性和高性能的分布式系统。同时,Ribbon也支持自定义的负载均衡策略,用户可以根据自己的需求实现自定义的负载均衡算法。
    要在 Spring Cloud 中使用 Ribbon 实现负载均衡,需要按照以下步骤进行:

    1. 在项目的 pom.xml 文件中添加 Spring Cloud 和 Ribbon 的相关依赖。
    2. 在项目的 application.yml 或 application.properties 文件中配置 Ribbon 相关的参数,例如 Ribbon 的服务器列表、轮询间隔等。
    3. 在项目的主程序中添加 @EnableDiscoveryClient 注解来启用 Nacos客户端功能。
    4. 在项目的服务类中添加 @Service 和 @Autowired 注解来声明服务和注入依赖。
    5. 在项目的客户端类中添加 @FeignClient 注解来声明客户端和调用服务。

    Feign

    概念:Feign是一个声明式的Web Service客户端,它使得写HTTP客户端变得更简单。Feign的口号是“Feign makes Java HTTP clients dead simple”,它的核心注解和方法极简主义以及使用可插拔的编码器和解码器,使得编写HTTP客户端变得更简单。

    在概念上,Feign是一种轻量级的RESTful的HTTP服务客户端,它以Java接口注解的方式调用Http请求,类似于Dubbo,服务消费者拿到服务提供者的接口,然后像调用本地接口方法一样去调用,实际发出的是远程的请求。

    在定位上,Feign是Spring Cloud生态系统中的一部分,它主要用于服务的远程调用。

    在原理上,Feign通过动态代理的方式将接口的方法映射到HTTP请求上,然后通过HTTP客户端发送请求,最终获取到响应结果。在使用Feign进行远程调用时,我们需要定义一个接口,该接口中定义了需要调用的方法。接口中的方法可以使用注解来指定请求的URL、请求方法、请求参数等信息。例如,我们可以使用@FeignClient注解来指定需要调用的服务名称和服务地址等信息。

    在使用上,Feign可以通过引入相关的依赖包来使用。在配置上可以通过添加注解和编写Feign的客户端代码来实现远程调用。同时也可以根据实际需要自定义配置和优化Feign的使用。
    要在 Spring Cloud 中使用 Feign 实现远程调用,需要按照以下步骤进行:

    1. 在项目的 pom.xml 文件中添加 Spring Cloud 和 Feign 的相关依赖。
    2. 在项目的 application.yml 或 application.properties 文件中配置 Feign 相关的参数,例如 Feign 的客户端名称、超时时间等。
    3. 在项目的主程序中添加 @EnableFeignClients 注解来启用 Feign 客户端功能。
    4. 在项目的服务接口中添加 @FeignClient 注解来声明服务接口和指定远程服务的 URL。
    5. 在项目的客户端类中注入服务接口,并通过服务接口来调用远程服务的方法

    Feign拓展

    1>@FeignClient 中name为服务提供者在nacos上注册的服务名, 否则报错

    Load balancer does not have available server for client:xxxx-service
    
    • 1

    2>@GetMapping(“/products/{pid}”) 指定接口路径,必须跟服务提供者提供接口url一样,否则报错

    feign.FeignException$NotFound: [404] during [GET] to [http://xxx-service/xxx] 
    
    • 1

    3> 定义接口参数:如果使用了参数路径方式访问,需要使用@PathVariable(“pid”) 明确指定路径参数,否则报错

    feign.FeignException$NotFound: [404] during [GET] to [http://xxx-service/xxx] 
    
    • 1

    4>定义接口参数:如果使用普通方式访问,参数需要使用@RequestParam标记,否则报错

    feign.FeignException$MethodNotAllowed: [405] during [GET] to [http://xxxx-service/xxxx?xxx=1]
    
    • 1

    5>定义接口参数:如果是对象参数,参数需要使用@RequestBody标记(注意fegin接口,controller接口都要),否则报错

    参数无法获取
    
    • 1

    6>定义接口参数:如果是对象,可以使用@SpringQueryMap替换上面的@RequestBody

    7>定义接口参数:如果需要进行文件上传,需要使用@RequestPart注解标记

    8>Feign接口调用默认连接时间是1s,如果电脑较慢,开发中可以配置长一点时间

    注意:后面学sentinel 时候,不要配置,会影响观测效果

    feign:
      client:
        config:
          default:
            connectTimeout: 5000  #连接时间,单位毫秒
            readTimeout: 5000     #操作时间
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  • 相关阅读:
    使用docker在linux上部署MySQL
    1分钟搞定跨境支付!什么GPT,Calude2不在话下!
    linux下构建rocketmq-dashboard多架构镜像——筑梦之路
    【深度学习实践(二)】上手手写数字识别
    云呐|动力环境监控系统,机房环境及动力设备监控系统
    元宇宙场景技术实践|实现“虚拟人”自由
    STM32存储左右互搏 I2C总线FATS读写FRAM MB85RC1M
    学习笔记--强化学习(1)
    Standard Template Libary or C++ Standard Library
    【申博攻略】六.如何联系心仪的导师以及前期注意事项
  • 原文地址:https://blog.csdn.net/vvv3171071/article/details/134388821