首页 > 其他分享 >Spring下RestTempLate与Feign简单使用

Spring下RestTempLate与Feign简单使用

时间:2023-05-24 22:23:44浏览次数:49  
标签:Feign http 请求 Spring RestTempLate feign 注解 连接池

RestTempLate

官网:RestTemplate: The original Spring REST client with a synchronous, template method API.
从上面的介绍中我们可以知道:RestTemplate 是一个同步的 Rest API 客户端。如果您需要从应用程序中调用远程 REST 服务,则可以使用 Spring Framework 的RestTemplate类。

使用步骤

1.导依赖

image

2.加配置

在配置类上使用@Bean注入RestTempLate
image

3.调用

image

注:样例为用户和订单,订单服务通过RestTempLate远程调用用户服务

常用方法

image

RestTempLate远程调用存在下面的问题:

  • 代码可读性差,编程体验不统一
  • 参数复杂URL难以维护

Feign

1.简单使用

Feign是一个声明式的http客户端,官方地址:https://github.com/OpenFeign/feign 其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。
注:在服务消费者端
1.导依赖

image

2.加注解
再启动类添加注解开启Feign的功能

image

3.编写Feign的客户端

image

这个客户端主要是基于SpringMVC的注解来声明远程调用的信息,比如:

  • 服务名称:userservice
  • 请求方式:GET
  • 请求路径:/user/
  • 请求参数:Long id
  • 返回值类型:User

这样,Feign就可以帮助我们发送http请求,无需自己使用RestTemplate来发送了。

实测:

image

2.自定义配置

Feign可以支持很多的自定义配置,如下表所示:

类型 作用 说明
feign.Logger.Level 修改日志级别 包含四种不同的级别:NONE、BASIC、HEADERS、FULL
feign.codec.Decoder 响应结果的解析器 http远程调用的结果做解析,例如解析json字符串为java对象
feign.codec.Encoder 请求参数编码 将请求参数编码,便于通过http请求发送
feign. Contract 支持的注解格式 默认是SpringMVC的注解
feign. Retryer 失败重试机制 请求失败的重试机制,默认是没有,不过会使用Ribbon的重试

一般情况下,默认值就能满足我们使用,如果要自定义时,只需要创建自定义的@Bean覆盖默认Bean即可。

下面以日志为例来演示如何自定义配置。

2.1 配置文件方式

基于配置文件修改feign的日志级别可以针对单个服务:

image

也可以针对所有服务:

image

而日志的级别分为四种:

  • NONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。

2.2 通过代码方式

先声明一个类,然后在声明一个Logger.Level的对象:

image

如果要全局生效,将其放到启动类的@EnableFeignClients这个注解中:

image

如果是局部生效,则把它放到对应的@FeignClient这个注解中:

image

3 Feign的使用优化

Feign底层发起http请求,依赖于其它的框架。其底层客户端实现包括:

•URLConnection:默认实现,不支持连接池

•Apache HttpClient :支持连接池

•OKHttp:支持连接池

因此提高Feign的性能主要手段就是使用连接池代替默认的URLConnection。

这里我们用Apache的HttpClient来演示。

1.引入依赖

image

2.配置连接池

image

Feign优化面试题:

1.日志级别尽量用basic

2.使用HttpClient或OKHttp代替URLConnection

① 引入feign-httpClient依赖

② 配置文件开启httpClient功能,设置连接池参数

4 最佳实践

4.1 继承方式

一样的代码可以通过继承来共享:

1)定义一个API接口,利用定义方法,并基于SpringMVC注解做声明。

2)Feign客户端和Controller都集成改接口

image

优点:

  • 简单
  • 实现了代码共享

缺点:

  • 服务提供方、服务消费方紧耦合

  • 参数列表中的注解映射并不会继承,因此Controller中必须再次声明方法、参数列表、注解

4.2 抽取方式

将Feign的Client抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,提供给所有消费者使用。

例如,将UserClient、User、Feign的默认配置都抽取到一个feign-api包中,所有微服务引用该依赖包,即可直接使用。

image

image


1)记得在feign-api中然后引入feign的starter依赖

image

2)在服务消费方引入Feign-api的依赖

image

3)解决扫描包问题
方式一:

指定Feign应该扫描的包:

image

方式二:

指定需要加载的Client接口:

image

参考:黑马教程,黑马yyds

标签:Feign,http,请求,Spring,RestTempLate,feign,注解,连接池
From: https://www.cnblogs.com/yydsDW/p/17429718.html

相关文章

  • java基于springboot+vue的书籍学习平台管理系统,学期学习论坛管理系统,附源码+数据库+lw
    1、项目介绍困扰管理层的许多问题当中,书籍学习将会是不敢忽视的一块。但是管理好书籍学习又面临很多麻烦需要解决,在工作琐碎,记录繁多的情况下将书籍学习的当前情况反应给相关部门决策,等等。在此情况下开发一款书籍学习平台,于是乎变得非常合乎时宜。经过网上调查和搜集数据,......
  • springboot项目启动报错java.lang.NoSuchMethodError: org.springframework.boot.buil
    产生此问题的原因是由于springboot版本兼容性导致的:java.lang.NoSuchMethodError:org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava/lang/Object;)V2019-08-2918:04:54.089ERROR[restartedMain][SpringApplication.java:842]-Applicationrunfail......
  • spring boot项目访问外部http请求的解决方案
    在Spring-Boot项目开发中,存在着本模块的代码需要访问外面模块接口,或外部url链接的需求。针对这一需求以前的做法就是访问外部请求都要经过httpClient需要专门写一个方法,来发送http请求,这个就不说了,网上一搜全都是现成的方法。springboot实现外部http请求是通过FeignClient来请求......
  • 【老王读SpringMVC-5】Controller method 是如何执行的?
    通过前面对Controllermethod参数绑定的分析,我们知道,被@RequestMapping标记handlermethod的执行是通过调用RequestMappingHandlerAdapter#handle()。RequestMappingHandlerAdapter#handle()具体的调用过程如下:参数解析、handlermethod的执行和对返回值的处理,最终......
  • spring-boot配置文件中server.context-path不起作用的解决方案
    背景:server.context-path不起作用简单说springboot项目路径默认是ip:port进入项目,通过在application配置文件添加server.context-path属性,可自定义上下文,如ip:port/server.context-path而springboot2.0之后,上下文的配置改为了server.servlet.context-path。  如果还是不懂可......
  • springboot常用注解
    SpringBoot是基于Spring框架的部分组件进行封装,所以大部分注解都是Spring框架中常用的注解。下面是SpringBoot中常用的注解:-----------------------------------------------------------------------1、@SpringBootApplication:这个注解是SpringBoot应用的入口标志,......
  • Hystrix(服务熔断)+Feign和FallbackFactory(服务降级)
    分布式系统面临的服务雪崩问题当用户发起请求时,假设处理请求的服务器1运行时需要调用到服务器2,服务器2运行时需要调用到服务器3,而如果服务器2因为某些原因始终不能正常调用到服务器3,这时候后面其他用户的请求也都会阻塞在服务器1,在并发量极大的情况下容易导致多个服务器崩溃已经......
  • springcloud 第一个项目遇到的报错
    在创建模块springcloud-provider-8001的时候出现两个错误,一个是CLASSNOTFOUND,另一个是错误的类文件:/D:/apache-maven-3.8.8/maven-repo/org/springframework/spring-beans/6.0.4/spring-beans-6.0.4.jar!/org/springframework/beans/factory/annotation/Autowired.class   ......
  • 【服务治理】基于SpringCloudAlibaba微服务组件的灰度发布设计(二)
    一.背景在上文中,灰度发布遇到了些问题,例如:1.动态修改Nacos配置中心的元数据信息,如何同步到Nacos注册中心对应服务的列表中2.管理后台业务调用其它服务灰度实例时的路由规则二.解决方案//TODO ......
  • 微服务框架SpringCloud-2-服务拆分及远程调用-2.2服务远程调用
    微服务框架SpringCloud2服务拆分及远程调用2.2服务远程调用2.2.1根据订单id查询订单功能需求:根据订单id查询订单的同时,把订单所属的用户信息一起返回现在是不能做到的, 可以看到现在user是个null【所以没有达到需求】现在的情况是下面的样子  但是需求想要的......