Ezio's Blog
Posts Categories Tags Music Mood About
Ezio's Blog· Light
☰ Menu
Posts Categories Tags Music Mood About
Expand all Back to top Go to bottom

Feign

Author: Ezio Date: July 23, 2022  9:52:20 Category: Spring Cloud

基于feign的远程调用

1.引入依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.在服务调用方即消费者的服务启动类上加上注解 @EnableFeignClients

1
2
3
4
5
6
7
@EnableFeignClients()
public class OrderApplication {

public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}

3.编写客户端

1
2
3
4
5
6
@FeignClient(value = "userservice")
public interface UserClient {

@GetMapping("/user/{id}")
User findById(@PathVariable("id") Long id);
}

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

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

自定义Feign配置

方式一:配置文件方式

1.全局生效:

1
2
3
4
5
feign:
client:
config:
default: # default全局配置
loggerLevel: Full # 日志级别

2.局部服务生效:

1
2
3
4
5
feign:
client:
config:
userservice: # 写服务名称就是针对某个服务的配置
loggerLevel: Full # 日志级别

方式二:java代码方式

1.声明一个bean

1
2
3
4
5
6
public class DefaultFeignConfiguration {
@Bean
public Logger.Level logLevel(){
return Logger.Level.BASIC;
}
}

2.全局配置:

1
@EnableFeignClients(defaultConfiguration = DefaultFeignConfiguration.class)

3.局部配置:

1
@FeignClient(value = "userservice", defaultConfiguration = DefaultFeignConfiguration.class)

Feign性能优化

Feign底层客户端实现:

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

优化点:

  1. 使用有连接池的代替默认的URLConnection
  2. 日志级别,最好用basic或none

连接池配置:

1.引入依赖:

1
2
3
4
5
<!-- 引入HttpClient依赖 -->
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
</dependency>

2.配置连接池:

1
2
3
4
5
6
7
8
9
feign:
client:
config:
default: # default全局配置
loggerLevel: BASIC # 日志级别
httpclient:
enabled: true # 支持HttpClient的开关
max-connections: 200 # 最大连接数
max-connections-per-route: 50 # 单个路径的最大连接数

Feign实践方式

将FeignClient单独抽取一个模块,将pojo、默认配置等放到模块中。

1.新建一个module,命名例如user-api,引入feign的starter依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2.编写Client、pojo、默认配置类

3.消费者引入user-api的依赖

4.在@EnableFeignClients上指定client位置。

1
@EnableFeignClients(clients = UserClient.class, defaultConfiguration = DefaultFeignConfiguration.class)

Author: Ezio

Permalink: https://ezioy.cn/2022/07/23/Feign/

License: Copyright (c) 2019 CC-BY-NC-4.0 LICENSE

Slogan: Nothing is true,Everything is permitted

Tag(s): # Spring Cloud # Feign
back · home
Spring AMQP Docker
Ezio © 2019 - 2026 | Powered by Hexo & Chic | 访客数量:   浏览次数: | 渝公网安备50011302222043 | 渝ICP备2023013933号-1