OpenFeign的学习总结

1.Fegin调用只有在微服务之间才会使用,以前的单体项目用不到,因为单体项目不会涉及到分库的概念,并且单体项目就一个应用,想用的功能都可以直接方法调用,但是微服务就不行,跨服务的调用只能通过http的操作,这很像以前的单体项目不同产品之间的调用,或者前端与后端的调用。Fegin调用的实质还是http的调用。现在微服务之间调用如果还是写以前的http://ip:端口/访问路径,代码实现起来就会很麻烦,所以出现了Feign,底层做了HTTP的集成,让开发者省略了这其中的麻烦,开发更便捷

2.Feign使用少不了依赖,同时基于实际应用中一个应用会部署多台服务,所以引入fegin依赖的同时也要引入负载均衡的依赖,这个可以在自己机器上修改服务端口启动两个同应用服务玩一下,

依赖如下:

  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

3.对于Fegin的使用,个人理解,在微服务中,可以单独抽取一个公共api模块单独放置所有的Fegin,这样的话,整体工程看起来会更明确更有具体指向性。我们其它服务只需要去引入这个模块就可以引用到,岂不是很方便。

4.Fegin接口的写法,feign既然是微服务之间的http调用,那么就像我们对外提供业务接口类似。在实际业务开发中,对外提供接口,调用方就要通过网关访问我们Controller层的@RequestMapping("/**")+@PostMapping("/**")才可以访问到我们的服务。所以,feign也是这个逻辑,我们在写fegin接口的时候也是采取这个原则。Fegin接口调用的时候我们一定要明确调用的是哪个服务,代码案例如下:

@FeignClient(value = "***-service")
public interface I***Client {

    @DeleteMapping("/**")

      //这一列的方法,和controller层调用的是一致的,不然怎么调用呢?
    void deleteCartItemByIds(@RequestParam("ids") Collection<Long> Ids);

}

5.Feign的使用,启动类是必须要添加注解使用的,@EnableFeignClients(basePackages = "com.***.client" ),但是这个注解加在哪个服务启动类上呢?原则是,那个应用调用Fegin哪个服务启动类加。

6.Fegin调用的时候是耗费资源的,就像每次发起http连接都是要进行sorcat链接一样,或者说像我们连接数据库,每次都建立连接都耗费资源,所以有数据库连接池。同样,fegin也有链接池,且,fegin的连接池很件到,只要在服务中引入依赖,配置文件假如配置就完成了,示例如下:

依赖:<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

配置:

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

6.Fegin使用的时候,在实际应用中,尤其是服务联调或者查询bug时,会像看下请求报文或者响应报文什么的,这个时候就需要有日志,我觉得可以用切面拦截的方式实现,这样可以控制全局的feign都打印日志出来,这个百度一大堆,随便抄一个就可以了。还有一种配置类的方式,可以实现fegin的日志级别,这个涉及到局部生效和全局生效的一个区别,全局生效的方式有点类似于切面拦截方式,这种方式就是在启动类上添加注解:

全局生效:操作在启动类的注入

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

局部生效:只操作在当前的FeginClient

@FeignClient(value = "item-service", configuration = DefaultFeignConfig.class)

配置类:这个类做为Bean被spring容器自动装配

public class DefaultFeignConfig {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;        //日志级别
    }
}

7.Fegin日志的级别:

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:
- NONE:不记录任何日志信息,这是默认值。
- BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
- HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
- FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据。
Feign默认的日志级别就是NONE,所以默认我们看不到请求日志。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值