首页 > 其他分享 > 动力节点第四章OpenFeign与负载均衡-最全springcloud Alibaba学习笔记

动力节点第四章OpenFeign与负载均衡-最全springcloud Alibaba学习笔记

时间:2023-08-02 18:05:00浏览次数:36  
标签:负载 OpenFeign 4.2 springcloud 提供者 feign 接口 Alibaba

学习笔记视频:https://www.bilibili.com/video/BV1VW4y1o7n5 本课程使用的是目前最新版本2022.0.0.0-RC2。基于Spring Boot 3.0与JDK20的开发环境。 课程内容涵盖了SpringCloudAlibaba所有的技术点,主要讲述包括Nacos Discovery、Nacos Config、OpenFeign、Spring Cloud Loadbalancer、Spring Cloud

4 OpenFeign与负载均衡

前面消费者对于微服务的消费是通过RestTemplate完成的,这种方式的弊端是很明显的:

  • 消费者对提供者的调用无法与业务接口完全吻合。例如,原本Service接口中的方法是有返回值的,但经过RestTemplate相关API调用后没有了其返回值,最终执行是否成功用户并不清楚。再例如RestTemplate的对数据的删除与修改操作方法都没有返回值。
  • 代码编写不方便,不直观。提供者原本是按照业务接口提供服务的,而经过RestTemplate一转手,变为了URL,使得程序员在编写消费者对提供者的调用代码时,变得不直接、不明了。没有直接通过业务接口调用方便、清晰。

4.1 概述

4.1.1 OpenFeign简介

【翻译】声明式REST客户端:Feign通过使用JAX-RS(Java Api eXtensions of RESTful web Servivces)或SpringMVC注解的修饰方式,生成接口的动态实现。 【解析】Feign,假装、伪装。OpenFeign可以将提供者提供的Restful服务伪装为接口进行消费,消费者只需使用“feign接口 + 注解”的方式即可直接调用提供者提供的Restful服务,而无需再使用RestTemplate。 【总结】对于OpenFeign,可简单总结为以下几点:

  • OpenFeign只涉及Consumer与Provider无关。因为其是用于Consumer调用Provider的
  • OpenFeign仅仅就是一个伪客户端,其不会对请求做任务的处理
  • OpenFeign是通过注解的方式实现RESTful请求的

4.1.2 OpenFeign与Ribbon

OpenFeign具有负载均衡功能,其可以对指定的微服务采用负载均衡方式进行消费、访问。之前老版本Spring Cloud所集成的OpenFeign默认采用了Ribbon负载均衡器。但由于Netflix已不再维护Ribbon,所以从Spring Cloud 2021.x开始集成的OpenFeign中已彻底丢弃Ribbon,而是采用Spring Cloud自行研发的Spring Cloud Loadbalancer作为负载均衡器。

4.2 OpenFeign用法

4.2.1 消费者工程使用

这里无需修改提供者工程,只需修改消费者工程即可。

4.2.1.1 创建工程

复制02-consumer-nacos-8080,并重命名为04-consumer-feign-8080。

4.2.1.2 添加openfeign依赖

注意, 这里使用的是spring-cloud-starter-openfeign依赖,而非spring-cloud-starter-feign依赖。

| <!--feign依赖--><dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>
4.2.1.3 定义Feign接口

注意,这里的接口名可以是任意的名称,接口中的方法名也可以是任意的名称。但@FeignClient参数指定的提供者服务名称是不能修改的,接口与方法上添加的@XxxMapping中的参数是不能修改的,必须与提供者相应的请求URI相同。 由于其充当的是业务接口,所以一般其定义在service包中。

4.2.1.4 删除Config类

由于这里使用的是Feign,所以无需再定义RestTemplate了,所以就将原来的Config类删除即可。

4.2.1.5 修改处理器

这里使用Feign接口来消费微服务。

4.2.1.6 修改启动类

在启动类上添加@EnableFeignClients注解。

4.2.2 超时设置

4.2.2.1 全局超时设置

在04-consumer-feign-8080工程的配置文件中直接添加如下内容:

4.2.2.2 局部超时设置

在全局设置的基础之上,若想单独对某些微服务单独设置超时时间,只需要将前面配置中的default修改为微服务名称即可。局部设置的优先级要高于全局设置的。

4.2.3 Gzip压缩设置

OpenFeign可对请求与响应进行压缩设置。在04-consumer-feign-8080工程的配置文件中直接添加如下内容:

4.2.4 选择远程调用的底层实现技术

4.2.4.1 理论基础

feign的远程调用底层实现技术默认采用的是JDK的URLConnection,同时还支持HttpClient与OkHttp。 由于JDK的URLConnection不支持连接池,通信效率很低,所以生产中是不会使用该默认实现的。所以在Spring Cloud OpenFeign中直接将默认实现变为了HttpClient,同时也支持OkHttp。 用户可根据业务需求选择要使用的远程调用底层实现技术。

4.2.4.2 配置说明

在spring.cloud.openfeign.httpclient下有大量HttpClient的相关属性设置。其中可以发现,spring.cloud.openfeign.httpclient.enabled默认为true。 在spring.cloud.openfeign.okhttp.enabled默认值为false,表明默认没有启动OkHttp。OkHttp的读超时设置共用了HttpClient的读超时设置属性。

4.3 负载均衡

前面的消费者例子是通过Feign接口来消费微服务的,但没体现出其负载均衡的功能。所以,下面将进行Feign负载均衡功能展示。

4.3.1 需求

下面将构建这样一个系统:一个微服务由三个提供者提供,而消费者对这三个提供者进行负载均衡访问。

4.3.2 启动提供者工程

将02-provider-nacos-8081工程启动三个实例,它们的端口号分别为8081、8082与8083。

4.3.3 默认负载均衡策略

在nacos及三个提供者均启动的前提下,直接启动运行04-consumer-feign-8080消费者工程即可。然后再访问消费者工程。每刷新一次页面,其显示的部门名称后的端口号就发生变化,说明实现了负载均衡。再仔细查看其变化顺序,一定是8082、8083、8084,循环变化。那是因为,OpenFeign的负载均衡器Ribbon默认采用的是轮询算法。

4.3.4 更换负载均衡策略

在04-consumer-feign-8080项目上直接修改。

4.3.4.1 定义一个Config类

4.3.4.2 修改启动类

在启动类上添加@LoadBalancerClients注解,并指定前面定义的配置类。

标签:负载,OpenFeign,4.2,springcloud,提供者,feign,接口,Alibaba
From: https://blog.51cto.com/u_12349365/6940911

相关文章

  • SpringCloudAlibaba Gateway聚合knife4j接口文档
    实现效果:Gateway服务可以查看多个服务的接口文档; knife4j依赖:<dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>3.0.3</versio......
  • springboot和springcloud区别
    springboot和springcloud区别有:1、含义不同;2、作用不同;3、使用方式不同;4、特征不同;5、注释不同;6、优势不同;7、组件不同;8、设计目的不同。其中,含义不同指的是springboot是一个快速开发框架,而SpringCloud是建立在SpringBoot上的服务框架。1、含义不同springboot:一个快速开发框架......
  • springCloud
    传统项目转型存在的问题·代码耦合,开发维护困难·无法针对不同模块进行针对性优化·无法水平扩展·单点容错率低,并发能力差垂直拆分当访问量逐渐增大,单一应用无法满足需求,此时为了应对更高的并发和业务需求,我们根据业务功能对系统进行拆分:优点·系统拆分实现了流......
  • Spring Cloud Alibaba 2022 正式发布,启动速度提升 10 倍,各方面直接起飞!
    大家好,我是栈长。经过SpringCloudAlibaba2022的第一个候选版本2022.0.0.0-RC1发布7个多月后,中间还有一个2022.0.0.0-RC2版本,就在前几天,SpringCloudAlibaba2022.0.0.0正式版终于正式发布了。SpringCloudAlibaba2022.0.0.0依赖更新由于SpringBoot各个版本......
  • SpringCloud Gateway 在微服务架构下的最佳实践
    作者:徐靖峰(岛风)前言本文整理自云原生技术实践营广州站Meetup的分享,其中的经验来自于我们团队开发的阿里云CSB2.0这款产品,其基于开源SpringCloudGateway开发,在完全兼容开源用法的前提下,做了诸多企业级的改造,涉及功能特性、稳定性、安全、性能等方面。为什么需要微服务网......
  • alibaba获得店铺的所有商品 API
    为了进行电商平台的API开发,首先我们需要做下面几件事情。1)开发者注册一个账号2)然后为每个alibaba应用注册一个应用程序键(AppKey)。3)下载alibabaAPI的SDK并掌握基本的API基础知识和调用4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程序开发。5)利用ali......
  • alibaba按关键字搜索商品 API
    为了进行电商平台的API开发,首先我们需要做下面几件事情。1)开发者注册一个账号2)然后为每个alibaba应用注册一个应用程序键(AppKey)。3)下载alibabaAPI的SDK并掌握基本的API基础知识和调用4)利用SDK接口和对象,传入AppKey或者必要的时候获取并传入SessionKey来进行程序开发。5)利用ali......
  • 使用OpenFeign传递二进制流
    在现代的分布式系统中,服务之间的通信变得越来越普遍。OpenFeign是一个流行的JavaHTTP客户端工具,它简化了在微服务架构中进行服务间通信的过程,本文将简单介绍如何使用OpenFeign传递二进制流。什么是OpenFeign?OpenFeign是一个用于声明式、模板化的HTTP客户端的Java库。它简化了编......
  • springcloud一些组件
    springcloud官网文档略记录下 1、springcloud阿里巴巴 Nacos:服务注册和发现,分布式配置数据存储事件驱动:可扩展的事件驱动微服务,连接rocketmq消息总线:rocketmq 连接节点分布式事务:seata?DubboRPC:服务间的连接协议2、springcloudbus 用轻量的消息中介,来连接分......
  • 最全springcloudAlibaba视频笔记-第三章Nacos Config服务配置中心
    NacosConfig服务配置中心课程视频:https://www.bilibili.com/video/BV1VW4y1o7n5本课程使用的是目前最新版本2022.0.0.0-RC2。基于SpringBoot3.0与JDK20的开发环境。集群中每一台主机的配置文件都是相同的,对配置文件的更新维护就成为了一个棘手的问题。此时就出现了配置中心......