SpringCloud:Feign的使用及配置

这篇具有很好参考价值的文章主要介绍了SpringCloud:Feign的使用及配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

Feign的使用及配置

1、Feign替代RestTemplate

2、使用Fegin步骤

3、自定义配置

4、Feign使用优化

5、Feign的最佳实践方式


Feign的使用及配置

1、Feign替代RestTemplate

RestTemplate方式远程调用的问题

SpringCloud:Feign的使用及配置

 问题:

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

2、参数复杂,URL难以维护

Feign介绍

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

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

2、使用Fegin步骤

1、引入依赖

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

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

@EnableFeignClients
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
@EnableFeignClients
public 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日志配置

1、yml文件配置

全局生效

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

局部生效

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

2、 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

1、引入依赖

        <!--引入HttpClient依赖-->
        <dependency>
            <groupId>io.github.openfeign</groupId>
            <artifactId>feign-httpclient</artifactId>
        </dependency>

 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定义统一的父接口作为标准。
 

SpringCloud:Feign的使用及配置

 弊端:

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

方式二(抽取):

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

提供给所有消费者使用
SpringCloud:Feign的使用及配置

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

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

1、指定FeignClient所在包

SpringCloud:Feign的使用及配置

 2、指定FeignClient字节码

SpringCloud:Feign的使用及配置

 总结:Feign的最佳实践

1、让controller和FeignClient继承同一接口

2、将Feignclient、POJO、Feign的默认配置都定义到一个项目中,供所有消费者使用
 文章来源地址https://www.toymoban.com/news/detail-482444.html

到了这里,关于SpringCloud:Feign的使用及配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud微服务环境中,使用Feign跨服务调用Api

    在微服务中,很多时候都需要调用其他小组的服务接口,这里记录一下使用Feign调用其他服务的过程。 第一步,导入依赖:  第二步,被调用服务编写接口:  第三步,调用服务端启动类上添加@EnableFeignClients  第四步,编写调用API接口,接口上添加@FeignClient注解,注解的na

    2024年02月10日
    浏览(37)
  • 【SpringCloud Alibaba】(四)使用 Feign 实现服务调用的负载均衡

    在上一文中,我们实现了服务的自动注册与发现功能。但是还存在一个很明显的问题:如果用户微服务和商品微服务在服务器上部署多份的话,之前的程序无法实现服务调用的负载均衡功能。 本文就带着大家一起实现服务调用的负载均衡功能 负载均衡:将原本由一台服务器

    2024年02月15日
    浏览(39)
  • SpringCloud小项目——订单积分商城 & 使用Nacos、Open Feign、Gateway、Sentinel技术栈

    使用Nacos、Open Feign、Gateway、Sentinel技术栈实现XX公司订单、库存、积分的案例开发,以下是服务调用关系 git代码:https://gitee.com/pet365/spring-cloud-goods https://github.com/RainbowForest/e-commerce-microservices https://awesomeopensource.com/project/RainbowForest/e-commerce-microservices 使用Nacos、Open Feign、Gate

    2024年02月08日
    浏览(44)
  • springcloud微服务架构(eureka、nacos、ribbon、feign、gateway等组件的详细介绍和使用)

    目录 一、微服务演变 1、单体架构(Monolithic Architecture) 2、分布式架构  3、微服务 4、 总结 5、微服务架构 5.1、 微服务技术对比 5.2、企业需求 二、spring cloud  springCloud与SpringBoot的版本兼容关系 1、服务拆分及远程调用 1.1、服务拆分 1.1.1、服务拆分注意事项 1.1.2、项目实战

    2024年02月08日
    浏览(42)
  • SpringCloud --- Feign远程调用

    先来看我们以前利用RestTemplate发起远程调用的代码: 存在下面的问题: 代码可读性差,编程体验不统一 参数复杂URL难以维护 Feign是一个声明式的http客户端,官方地址:GitHub - OpenFeign/feign: Feign makes writing java http clients easier 其作用就是帮助我们优雅的实现http请求的发送,解决

    2024年02月05日
    浏览(39)
  • SpringCloud学习—Feign负载均衡

    Feign是声明式Web Service客户端,它让微服务之间的调用变得更简单,类似controller调用service。SpringCloud集成了Ribbon和Eureka,可以使用Feigin提供负载均衡的http客户端 只需要创建一个接口,然后添加注解即可。使用接口方式调用服务 Feign,主要是社区版,大家都习惯面向接口编程。

    2024年02月15日
    浏览(41)
  • SpringCloud-基于Feign远程调用

    Spring Cloud 是一个用于构建分布式系统的开发工具包,它提供了一系列的微服务组件,其中之一就是 Feign。Feign 是一种声明式的 Web 服务客户端,它简化了在 Spring Cloud 中进行远程调用的过程。本文将介绍如何在 Spring Cloud 中使用 Feign 进行远程调用。 我们在 Spring Cloud 项目的

    2024年02月21日
    浏览(53)
  • SpringCloud(七) Feign远程调用

    目录 一, RestTemplate远程调用存在的问题 二, Feign的远程调用 2.1 什么是Fegin 2.2 Feign的使用(代替RestTemplate) 1. 引入依赖 2. 添加注解  3. 编写Feign的客户端 4. 测试 5. 总结  2.3 自定义配置 1. 配置文件方式  2. Java代码方式  三, Feign使用优化 3.1 使用连接池 1. 引入依赖 2. 配置连接池

    2024年02月06日
    浏览(39)
  • SpringCLoud——Feign的远程调用

    来看一下之前我们使用RestTemplate调用时编写的Contrriller代码: //        2. 利用RestTemplate发起HTTP请求 //        2.1 url 地址         String url = \\\"http://userserver/user/\\\" + order.getUserId(); //        2.2 发送http请求,实现远程调用         User user = restTemplate.getForObject(url,

    2024年02月07日
    浏览(35)
  • springCloud的ribbon和feign

    就是将原来的具体地址,改为了通过服务名去调用。注册中心中有多个服务,相同服务名,就会算作可以调用的服务。 首先得有一个注册中心,然后各种服务注册进去,然后利用ribbon或者feign去调用。   ribbon是直接用地址拼接,然后调用。 feign通过对外编写接口,然后实现

    2024年01月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包