Code Ease Code Ease
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档

神秘的鱼仔

你会累是因为你在走上坡路
  • 个人博客网站 (opens new window)
  • 好用的工具网站 (opens new window)
  • Java核心基础
  • 框架的艺术
  • 分布式与微服务
  • 开发经验大全
  • 设计模式
  • 版本新特性
数据库系列
大数据+AI
  • xxl-job
运维与Linux
  • 基于SpringBoot和BootStrap的论坛网址
  • 基于VuePress的个人博客网站
  • 基于SpringBoot开发的小功能
  • 做一个自己的IDEA插件
程序人生
关于我
  • 分类
  • 标签
  • 归档
服务器
  • Java核心基础

  • 框架的艺术

  • 分布式与微服务

    • SpringCloud

      • SpringCloud与微服务入门,使用idea搭建第一个微服务项目
      • Eureka基础与进阶实战
      • ribbon的服务调用和负载均衡
      • Feign的入门和高级使用
        • (一)Feign概述
        • (二)Feign的使用
          • 2.1 导入依赖
          • 2.2 配置调用接口
          • 2.3 在启动类上激活feign
          • 2.4 通过自动的接口调用远程微服务
        • (三)Feign的高级使用
      • Hystrix的入门和高级使用
      • SpringCloud之微服务网关的入门与进阶
    • SpringCloudAlibaba

    • Dubbo

    • 认证授权

    • 任务调度

  • 开发经验大全

  • 版本新特性

  • Java
  • 分布式与微服务
  • SpringCloud
CodeEase
2023-10-10
目录

Feign的入门和高级使用

作者:鱼仔
博客首页: codeease.top (opens new window)
公众号:Java鱼仔

# (一)Feign概述

Feign是Netflix开发的声明式,模板化的Http客户端,Feign可以帮助我们更加便捷的调用HTTP API。SpringCLoud对Feign进行了增强,使得Feign支持SpringMVC注解,并整合Ribbon和Eureka,从而让Feign更加实用方便。

对feign的实战我们依旧用前面的用户管理员微服务,这个demo包含用户微服务,管理员微服务和Eureka注册中心,在上面一篇博客用ribbon调用用户微服务时,我们用到了下面这段代码:

User user= restTemplate.getForObject("http://userservice/user/1",User.class);
1

相比直接填写ip地址和端口号,ribbon使用微服务名称代替ip和端口号确实让代码更加容易维护,但是如果每个微服务都要通过url拼接还是显得不方便,Feign就帮我们解决了这个问题。

# (二)Feign的使用

使用Feign主要需要以下四步骤:

1.导入依赖

2.配置调用接口

3.在启动类上激活feign

4.通过自动的接口调用远程微服务

# 2.1 导入依赖

在adminservice的pom.xml中导入依赖

<!--springcloud整个的openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
1
2
3
4
5

# 2.2 配置调用接口

新建一个Feign包,在Feign包下新建接口,名字可以自己定义,我给它命名为UserFeignClient。这个接口主要配置两个内容,在类名前声明需要调用的微服务名称,在方法名之前声明需要调用的微服务接口:

/**
 * 声明需要调用的微服务名称
 */
@FeignClient(name = "userservice")
public interface UserFeignClient {
    /**
     * 声明需要调用的微服务接口
     */
    @RequestMapping(value = "/user/{id}",method = RequestMethod.GET)
    public User findbyid(@PathVariable("id") int id);
}
1
2
3
4
5
6
7
8
9
10
11

# 2.3 在启动类上激活feign

在启动类上增加@EnableFeignClients注解:

@SpringBootApplication
@EntityScan("com.sdxb.admin.entity")
@EnableEurekaClient
@EnableFeignClients
public class AdminApplication {
    public static void main(String[] args) {
        SpringApplication.run(AdminApplication.class,args);
    }
}
1
2
3
4
5
6
7
8
9

# 2.4 通过自动的接口调用远程微服务

修改adminController

@RestController
@RequestMapping("/admin")
public class adminController {
    @Autowired
    private UserFeignClient userFeignClient;
    @RequestMapping(value = "/{id}",method = RequestMethod.GET)
    public User getuser(@PathVariable int id){
        //使用feign远程调用
        User user= userFeignClient.findbyid(id);
        return user;
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

代码很简单,首先自动注入UserFeignClient ,然后调用接口返回User,这样就不用再自己去整合url地址了。

# (三)Feign的高级使用

因为feign集合了ribbon依赖和自动配置,因此我们可以用ribbon的方式去配置feign,具体的配置方法见上一篇博客,同时也可以用feign自己的方法配

请求压缩:

Feign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗:

#请求压缩
feign.compression.request.enabled=true
feign.compression.response.enabled=true 
1
2
3

还可以对压缩的类型和上下限进行设置

feign.compression.request.mime-types=text/html,application/xml,application/json
feign.compression.request.min-request-size=2048
1
2

开启饥饿加载:

ribbon默认是懒加载,第一次获取服务会慢,因此开启饥饿加载:

ribbon.eager-load.enabled=true
#为哪些客户端开启饥饿加载,多个客户端用逗号分割
ribbon.eager-load.clients=
1
2
3

配置请求连接池:

feign的底层使用了apache的httpclient进行服务调用,因此可以配置连接信息

feign.httpclient.enabled=true
#最大连接数
feign.httpclient.max-connections=200
#每个请求的最大连接数
feign.httpclient.max-connections-per-route=50
1
2
3
4
5

日志输出:

feign提供对日志输出的设置,在配置文件中配置以下两条数据:

feign.client.config.userservice.logger-level=FULL
logging.level.com.sdxb.admin.Feign.UserFeignClient=debug
1
2

首先设置日志级别,使用:feign.client.config.微服务名称.logger-level=级别的方式

级别有以下四种:

NONE,不输出

BASIC,适用于生产环境问题追踪

HEADERS,在BASIC基础上增加请求和响应头信息

FULL,全部输出

接着设置需要输出哪个类的日志:logging.level.全限定类名=debug

可以看到运行后的控制台结果

上次更新: 2025/02/18, 11:30:08
ribbon的服务调用和负载均衡
Hystrix的入门和高级使用

← ribbon的服务调用和负载均衡 Hystrix的入门和高级使用→

最近更新
01
AI大模型部署指南
02-18
02
半个月了,DeepSeek为什么还是服务不可用
02-13
03
Python3.9及3.10安装文档
01-23
更多文章>
Theme by Vdoing | Copyright © 2023-2025 备案图标 浙公网安备33021202002405 | 浙ICP备2023040452号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式