返回顶部
首页 > 资讯 > 后端开发 > JAVA >SpringCloud:Feign的使用及配置
  • 395
分享到

SpringCloud:Feign的使用及配置

springcloudjavaspringboot 2023-09-18 18:09:15 395人浏览 独家记忆
摘要

目录 Feign的使用及配置 1、Feign替代RestTemplate 2、使用Fegin步骤 3、自定义配置 4、Feign使用优化 5、Feign的最佳实践方式 Feign的使用及配置 1、Feign替代RestTemplate

目录

Feign的使用及配置

1、Feign替代RestTemplate

2、使用Fegin步骤

3、自定义配置

4、Feign使用优化

5、Feign的最佳实践方式


Feign的使用及配置

1、Feign替代RestTemplate

RestTemplate方式远程调用的问题

 问题:

代码可读性差,编程体验不同统一

参数复杂,URL难以维护

Feign介绍

Feign是一个声明式的Http客户端,官方地址:OpenFeign · GitHub

其作用就是帮助我们实现http请求的发送,解决上面提到的问题。

2、使用Fegin步骤

引入依赖

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

在启动类添加注解开启Feign的功能

@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")@SpringBootApplication@EnableFeignClientspublic class OrderApplication {    public static void main(String[] args) {        SpringApplication.run(OrderApplication.class, args);    }}

 3、编写Feign客户端

@FeignClient("userservice")//服务名称public interface UserClient {    @GetMapping("/user/{id}")//访问路径    User findById(@PathVariable("id") Long id);//对应远程调用controller接口}

主要是基于springMVC的注解来声明远程调用的信息,比如:

服务名称: userservice        请求方式:GET·        请求路径:/user/{lid}·

请求参数:Long id·        返回值类型: User

3、自定义配置

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

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

Feign日志配置

yml文件配置

全局生效

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

局部生效

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

 java代码配置

定义一个配置类

public class DefaultFeignConfig {    @Bean    public Logger.Level logLevel(){        return Logger.Level.BASIC;    }}

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

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

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

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

4、Feign使用优化

Feign底层的客户端实现:

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

Apache HttpClient:支持连接池

OKHttp:支持连接池

因此优化Feign的性能主要包括:

使用连接池代替默认的URLConnection

日志级别,最好用basic或none

引入依赖

                            io.GitHub.openfeign            feign-httpclient        

 2、配置连接池

feign:  httpclient:    enabled: true # 支持HttpClient的开关    max-connections: 200 # 最大连接数    max-connections-per-route: 50 # 单个路径的最大连接数

总结

Feign的优化:
1.日志级别尽量用basic
2.使用HttpClient或OKHttp代替URLConnection
        引入feign-httpClient依赖
        配置文件开启httpclient功能,设置连接池参数

5、Feign的最佳实践方式

方式一(继承):

给消费者的FeignClient和提供者的controller定义统一的父接口作为标准。
 

 弊端:

服务紧耦合
2、父接口参数列表中的映射不会被继承

方式二(抽取):

将FeignClient抽取为独立模块,并且把接口有关的POJO、默认的Feign配置都放到这个模块中,

提供给所有消费者使用

使用这种方式时,如果定义的FeignClient不在SpringBootApplication的扫描包范围时,这些

FeignClient无法使用。有两种方式解决:

指定FeignClient所在包

 2、指定FeignClient字节码

 总结:Feign的最佳实践

让controller和FeignClient继承同一接口

将Feignclient、POJO、Feign的默认配置都定义到一个项目中,供所有消费者使用
 

来源地址:https://blog.csdn.net/qi341500/article/details/129300783

--结束END--

本文标题: SpringCloud:Feign的使用及配置

本文链接: https://www.lsjlt.com/news/412026.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作