栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

http客户端Feign

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

http客户端Feign

Feign

前言:
在Spring框架中,我么可以使用RestTemplate进行微服务之间的远程调用,即一个微服务向另一个微服务发送http请求获取数据。

它的代码是这样的:

但是这样存在很大的问题:
1、代码可读性差,编程体验不统一
2、URL参数复杂,难以维护

因此我们引入声明式的http客户端Feign来进行微服务之间的远程调用,他能帮我们优雅的实现http的请求和发送。

定义和使用Feign客户端:
1、引入依赖:


    org.springframework.cloud
    spring-cloud-starter-openfeign 

2、在order-service的启动类添加注解开启Feign的功能:

3、编写Feign客户端

@FeignClient("userservice")
public interface UserClient {
    @GetMapping("/user/{id}") 
    User findById(@PathVariable("id") Long id);
  }

上面内容主要是基于SpringMVC的注解来声明远程调用的信息,比如:
服务名称:userservice
请求方式:GET
请求路径:/user/{id}
请求参数:Long id
返回值类型:User

4、用Feign客户端代替RestTemplate

自定义Feign的配置
Feign运行自定义配置来覆盖默认配置,可以修改的配置如下:

一般我们需要配置的就是日志级别。

配置Feign日志有两种方式:
方式一:配置文件方式
1、全局生效:

feign:
  client: 
    config: 
        default: 
          # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
            loggerLevel: FULL #  日志级别 

2、局部生效:

feign:
  client: 
    config: 
        userservice: 
          # 这里用default就是全局配置,如果是写服务名称,则是针对某个微服务的配置
            loggerLevel: FULL #  日志级别 

方式二:java代码方式,需要先声明一个Bean:

public class FeignClientConfiguration {    
    @Bean    
    public Logger.Level feignLogLevel(){        
       return Logger.Level.BASIC;     
    }
}

而后如果是全局配置,则把它放到@EnableFeignClients这个注解中:

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class) 

如果是局部配置,则把它放到@FeignClient这个注解中:

@FeignClient(value = "userservice", configuration = FeignClientConfiguration.class) 

Feign的性能优化
Feign底层的客户端实现:
URLConnection:默认实现,不支持连接池
Apache HttpClient :支持连接池
OKHttp:支持连接池

因此优化Feign的性能主要包括:
使用连接池代替默认的URLConnection
日志级别,最好用basic或none

Feign的性能优化-连接池配置
Feign添加HttpClient的支持:
引入依赖:

    
	io.github.openfeign
    feign-httpclient

配置连接池:

feign:
  client:  
    config:   
       default: # default全局的配置    
           loggerLevel: BASIC # 日志级别,BASIC就是基本的请求和响应信息 
  httpclient:  
    enabled: true # 开启feign对HttpClient的支持  
    max-connections: 200 # 最大的连接数  
    max-connections-per-route: 50 # 每个路径的最大连接数

Feign的最佳实践(最佳使用方式)

方式一(继承,面向契约的编程思想,但这里耦合度增大):给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/585298.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号