Feign基本使用(超详细)

目录

一、Feign概述

二、Feign入门

        1.创建服务提供者(provider)

        2.创建feign接口    

        3、创建服务消费者(consumer)

 三、Feign 原理

 四、Feign优化

         1、开启feign日志

         2、feign超时问题

         3、http连接池

         4、gzip压缩



前言

        当我们通过RestTemplate调用其它服务的API时,所需要的参数须在请求的URL中进行拼接,如果参数少的话或许我们还可以忍受,一旦有多个参数的话,这时拼接请求字符串就会效率低下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、Feign概述

        Feign是Spring Cloud提供的声明式、模板化的HTTP客户端, 它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

        Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。

 

二、Feign入门

        注意:以下所有步骤实现的前提是需要在启动类上加入注解 @EnableFeignClients 主要是为开启feign接口扫描

        1.创建服务提供者(provider)

导入依赖:

<!--Spring Cloud OpenFeign Starter -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

代码如下(示例):

        在服务提供者中调用servic层获取数据

//创建服务提供者
@RestController
@RequestMapping("/provider")
public class ProviderController {@Autowiredprivate UserService userService;@RequestMapping("/getUserById/{id}")public User getUserById(@PathVariable Integer id){return userService.getUserById(id);}
}

        2.创建feign接口    

代码如下(示例):

        解释都放在了代码中,可以直接复制粘贴

/*** @FeignClient 一般采用服务名进行命名* name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现* url: url一般用于调试,可以手动指定@FeignClient调用的地址** @RequestMapping 主要用于feign框架拼接传递url,弥补了Ribbon的url需要手动拼接的缺陷* @PathVariable("id") 当路径为restful风格时路径传参方式* @RequestParam("id") 当路径为?id=250 时传参方式* @RequestBody User user 当路径为对象时采用的传参方式,(集合、数组等都属于对象)*/
@FeignClient("feign-provider")
@RequestMapping("/provider")
public interface UserFeign {@RequestMapping("/getUserById/{id}")User getUserById(@PathVariable("id") Integer id);@RequestMapping("/deleteUserById")User deleteUserById(@RequestParam("id") Integer id);//?形式拼接参数,?id=250@RequestMapping("/addUser")User addUser(@RequestBody User user);//pojo--->json
}

        3、创建服务消费者(consumer)

//服务消费者
@RestController
@RequestMapping("/consumer")
public class ConsumerController {@Autowiredprivate UserFeign userFeign;@RequestMapping("/getUserById/{id}")public User getUserById(@PathVariable Integer id){return userFeign.getUserById(id);}
}

        application.yml文件

server:
  port: 80
spring:
  cloud:
    nacos:
      discovery:
        server-addr: 192.168.209.129:8848
  application:
    name: feign-consumer

 三、Feign 原理

1、将feign接口的代理类扫描到Spring容器中:
        @EnableFeignClients开启feign注解扫描:FeignClientsRegistrar.registerFeignClients()扫描被 @FeignClient标识的接口生成代理类,并把接口和代理类交给Spring的容器管理。
    2、为接口的方法创建RequestTemplate
        当consumer调用feign代理类时,代理类会调用SynchronousMethodHandler.invoke()创建RequestTemplate(url,参数)
    3、发出请求
        代理类会通过RequestTemplate创建Request,然后client(URLConnetct、HttpClient、OkHttp)使用Request发送请求

四、Feign优化

        1、开启feign日志

                feign日志级别

         在consumer的yml文件中加入以下代码


feign:client:config:feign-provider: #此处写的是服务名称,针对我们feign微服务的配置,如果是default就是全局配置loggerLevel: full #配置Feign的日志级别,相当于代码配置方式中的Logger#在application.yml中使用 logging.level.<Feign客户端对应的接口的全限定名> 的参数配置格式来开启指定客户端日志
logging:level:com.bjpowernode.feign: debug

随后启动测试:

        出现以下结果表示日志输出成功 

        2、feign超时问题

        首先、Feign的负载均衡底层用的就是Ribbon,所以这里的请求超时配置其实就是配置Ribbon,当出现请求超时会出现以下报错。

注意 :当开启日志配置之后,feign超时问题不会出现报错情况。

        针对超时问题我们需要在之前的日志配置中加入以下内容

ConnectTimeout: 5000 #请求连接的超时时间

ReadTimeout: 5000 #请求处理的超时时间

         3、http连接池

          1、连接池介绍

        首先,我们知道HTTP连接需要经过三次握手,四次挥手的过程,这是很耗费性能的;所以HTTP连接池帮助我们节省了这一步。

        同时Feign的HTTP客户端支持三种框架:

        HttpURLConnection、HttpClient、OkHttp;默认是HttpURLConnection

         2、连接池使用

         先引入依赖到公共接口工厂interfac,如果没有做公共接口就放入consumer

<dependency>

<groupId>io.github.openfeign</groupId>

<artifactId>feign-httpclient</artifactId>

</dependency>

讲真的,其实这已经完成了,但是,我们还是要知道一下它的原理,否则显得太片面了

在配置文件中我们看到,连接池引入之后默认是开启的,所以我们就不用再写了

         4、gzip压缩

压缩能力

        当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70%以上的文件大小。·

这个开启也是比较简单,只需要在consumer中yml文件中写入以下代码即可

此时在浏览器中就可以看到我们提供的压缩方式,和浏览器支持的压缩方式 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/251653.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

中外黑客两则

外国一则&#xff1a;丹尼斯麦卡利斯泰尔里奇。挑选他的原因&#xff1a;帅。 &#xff08;英语&#xff1a;Dennis MacAlistair Ritchie&#xff1b;1941年9月9日&#xff0d;2011年10月12日[3][4]&#xff09;&#xff0c;著名的美国计算机科学家&#xff0c;对C语言和其他编…

git使用X篇_2_Git全套教程IDEA版(git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容)

本文是根据以下视频及网上总结进行更新后的介绍git使用的博文。包含了git、GitHub、Gitee码云、搭建公司内部GitLab、与IDEA集成等内容。 笔记来源&#xff1a;【尚硅谷】5h打通Git全套教程IDEA版&#xff08;涵盖GitHub\Gitee码云\GitLab&#xff09; 文章目录 初识 Git0、内容…

Axure原型模板、元件库、组件库

在产品设计中&#xff0c;随时会使用到相似场景&#xff0c;每次都反复绘制耗时耗力。 若使用通用模板即可快速提高设计效率。 下面给大家提供一个登录多种验证系统框架模板&#xff0c;可快速修改使用。 预览链接&#xff1a; Axure高保真原型设计、Axure元件库、产品交互…

AXURE9最全的WEB设计元件库(分享版).rplib

Axure9常用到的WEB设计元件库&#xff0c;在Axure点击号即可导入元件库使用&#xff0c;或者打开Axure R9安装目录&#xff0c;进入DefaultSettings\Libraries&#xff0c;复制资源到此目录并重启Axure软件即可看到。 文件&#xff1a;590m.com/f/25127180-481124286-469239 &…

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标、移动元件库、axure元件库、axure原型

Axure移动端通用元件库rplib格式包含安卓、苹果各种主流手机、平板线框图元件库、IOS系统图标、人物图标、导航和分页、表格元素、各种小图标等 移动端通用元件库、app通用元件库、数据展示、操作反馈、通用模板、数据录入、列表页、表单页、详情页、通用版布局、移动端手机模…

Axure导入元件库和使用

下载元件库 vant 元件库下载: Vant - Mobile UI Components built on Vue element UI 元件库下载:https://element.eleme.cn/#/zh-CN/resource 以vant示例&#xff0c;下载完成后解压 我们看到有.rp和.rplib格式的文件 rp文件可以理解为一个别人设计好的原型作品。 rplib是原…

【Axure9.0原型实战(一)】Axure9.0的元件库的使用、导入、制作、路径等操作方法与技巧(附Axure元件库大全)

Axure9.0的元件库 文章目录 Axure9.0的元件库Axure9.0的元件库大全1.windows系统加载元件库2.MAC系统加载元件库3.新加入一些元件库4.自己建立元件库 Axure9.0的元件库大全 链接&#xff1a;https://pan.baidu.com/s/18VWM9R1qgFAXXz8Xooq4-A 提取码&#xff1a;u2gx 1.windo…

Axure RP9 的元件库

Axure的元件库 1.加载元件库 可以通过导入一些现有的元件库&#xff0c;来提高绘制的效率及美观性。 &#xff08;1&#xff09;windows系统&#xff1a; 将准备好的元件库复制到Axure 根目录下-【DefaultSettings】-【Libraries】中&#xff1b;移动成功后&#xff0c;重启…

嵌入式linux音乐电子相册制作软件,ApowerShow – 超级轻便的在线照片音乐视频制作软件...

有没有什么好用的照片视频制作软件呢&#xff1f;我大概对比了一下国内的其他软件&#xff0c;发现转场效果很多&#xff0c;但是需要自己去添加。它们的界面感觉有点繁琐&#xff0c;不是那么简洁。 其实除了使用国内的照片视频制作软件&#xff0c;你还可以使用ApowerShow。它…

html立体音乐相册源码,印记工坊立体音乐相册 v 1.8 官方版|印记工坊立体音乐相册官方版|印记工坊立体音乐相册电脑版_最火软件站...

印记工坊立体音乐相册包含多种多样的模板可以供用户使用&#xff0c;制作多种样式的电子相册,是一款傻瓜式视频音乐相册制作工具&#xff0c;及时是毫无制作经验的用户也能创作出精美的相册。最火软件站提供下载。 软件特色 故事视频制作 MV展示视频相册 时间轴视频制作 时光轴…

html动感音乐相册,动感音乐相册

动感音乐相册app是一款超级好用的音乐相册软件&#xff0c;这款软件上的功能丰富&#xff0c;能够帮助用户进行照片编辑&#xff0c;制作幻灯片等等&#xff0c;还能在线选择背景音乐进行添加&#xff0c;让相册每次打开都有不一样的感觉&#xff0c;喜欢的朋友快来下载吧。 动…

视频删了怎么恢复

视频无处不在&#xff0c;记录着各种有意义的画面&#xff0c;那么一旦重要的视频文件删除了该怎么恢复呢?甲驭科技数据恢复小编教您如何操作恢复。 目前视频的录制主要是各种相机摄像机录制或者手机录制的&#xff0c;这里以相机摄像机录制视频恢复为例&#xff0c;讲述如何快…

大疆无人机视频恢复成功

随着大疆的用户越来越多&#xff0c;大疆在拍摄过程中也使用的越来越多&#xff0c;经常会有客户格式化或许其他误操作导致拍摄的数据丢失情况。希贝软件目前提供全系列大疆恢复方案&#xff0c;因为大疆无人机的碎片多样化&#xff0c;导致目前没有软件能够支持所有型号大疆录…

手机删除的视频怎么恢复?即刻扫描,快速恢复

手机里的照片跟视频一样&#xff0c;都存在于相册中&#xff0c;所以恢复的方法也异曲同工&#xff0c;不过视频所占用的内存比照片大很多&#xff0c;所以很多时候&#xff0c;拍的视频发送出去之后就会删掉&#xff0c;那么手机删除的视频怎么恢复&#xff1f;小编给大家推荐…

win10电脑不小心卸载的软件怎么恢复

win10电脑不小心卸载的软件怎么恢复?很多win10系统用户经常会卸载掉自己电脑中不常用的软件&#xff0c;来减少磁盘空间的占用率。最近就有一位win10用户向小编反映自己在删除软件的时候不小心把需要的软件卸载了该怎么恢复?针对这个问题&#xff0c;下面小编就为大家带来详细…

怎样恢复内存卡的视频文件?(图文操作解析)

我们的日常生活中&#xff0c;内存卡的使用率特别高&#xff0c;比如说相机、手机等电子设备都会使用内存卡。大量数据和文件都存储在内存卡中&#xff0c;如果内存卡发生了意外状况&#xff0c;丢失了重要数据&#xff0c;比如说视频文件时怎么办呢&#xff1f;怎样恢复内存卡…

佳能MP4视频恢复方法

佳能的旗下产品越来越多&#xff0c;型号也是日益增多。从早期的佳能5D到现在的80D中间有多个佳能型号机器用户&#xff0c;因为在使用的过程中会出现误操作或其他情况导致数据丢失&#xff0c;那么数据恢复成了必不可免的挽救数据措施&#xff0c;佳能其他型号录制的MOV格式如…

易佳佳能MOV视频恢复软件

有许多人都在使用佳能相机&#xff0c;并其所出产的MOV视频也被广泛应用到各个领域&#xff0c;但有时候视频丢失了该怎么办呢&#xff1f;那么就需要乐易佳佳能MOV视频恢复软件&#xff0c;这是一款超好用&#xff0c;且功能性质强大的专业佳能MOV视频恢复工具&#xff0c;不但…

视频数据丢失怎么办 怎样找回丢失的视频数据

视频数据丢失了怎么办?我们可以使用视频恢复工具进行恢复。在这里推荐一款合适的视频恢复软件&#xff0c;叫做云骑士数据恢复软件​&#xff0c;它支持多种数据存储设备&#xff0c;包括硬盘、U盘、内存卡、光盘、记忆棒等&#xff0c;支持上千种文件类型&#xff0c;并且软件…

多线程处理rabbitmq消息

问题描述&#xff1a;项目中接收到rabbitmq消息后&#xff0c;先进行一系列的处理&#xff0c;等所有处理完成后&#xff0c;将消息推送到前台&#xff0c;但是在处理消息的过程中&#xff0c;每个方法中都有与数据库交互的代码&#xff0c;直接导致消息推送不及时。 单线程代码…