OpenFeign:让你的微服务互相聊天的秘密武器

前言

此文章是针对黑马程序员的讲解进行二次梳理的,视频源地址:https://www.bilibili.com/video/BV1LQ4y127n4

1.介绍

Feign 是一个声明式的 http 客户端,官方地址: https://github.com/OpenFeign/feign

关键词

  1. HTTP客户端
  2. 声明式

2. 为了解决什么问题

我们平时进行服务之间的调用都用什么?

  • OKHttp
  • Apache HttpClient
  • Spring RestTemplate

使用这种HTTP客户端会产生什么问题了?

  • 耦合性太高,有嵌入性,我们需要通过URL方式进行远程调用,如果URL或者端口号改了,以及改变参数等问题都需要改动代码,可维护性低。

例如:

String url = "http://userservice/user/" + order.getUserId();
User user = restTemplate.getForObject(url, User.class);

3. 使用

1. 引入依赖

<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-openfeignartifactId>
dependency>

2.启动类开启注解

@EnableFeignClients
@SpringBootApplication
public class MyApplication{

  public static void main(String[] args){
  	SpringBootApplication.run(MyApplication.class.args);
  }
}

3.编写Feign客户端

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

到这里我们就能明白什么叫做声明式了,我们只需要声明调用需要的参数即可:

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

4. 自定义Feign配置

OpenFeign:让你的微服务互相聊天的秘密武器_第1张图片

方式一:配置文件方式

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

方式二:Java代码

编写配置类:

public class FeignClientConfiguration {
	@Bean
	public Logger.Level feignLogLevel(){
		return Logger.Level.BASIC;
	}
}
① 全局配置

放到启动类的配置上

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)

②局部配置

放到@FeignClent上

@EnableFeignClients(defaultConfiguration = FeignClientConfiguration.class)
  1. 性能优化
    Feign 底层的客户端实现:
    • URLConnection :默认实现,不支持连接池
    • Apache HttpClient :支持连接池
    • OKHttp :支持连接池

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

总结

OpenFeign:让你的微服务互相聊天的秘密武器_第2张图片

你可能感兴趣的:(微服务)