Feign
概述:
是一种跨服务调用的技术,实现两个服务之间的通讯,只能在cloud架构中使用,Feign的使用依赖于Eureka,只有两个服务都注册到了Eureka才能够实现两个服务之间的通讯。
使用
它的使用在上一篇已经说明
SpringCloud(三)-Eureka
需要注意的地方:
- 在被调用方的接口时要写全路径并且方法参数名称等都必须一致
- 使用@RequestBody传对象的时候,应该使用@PostMapping
- 有多个参数时,通过@RequestParam调用
源码说明:
我们看一下LoadBalancerFeignClient类,它实现的是Client接口,
其中最核心的方法是excute(),注释意思:会接受一个请求并返回一个响应,它有两个参数,request和options,我们先看一下request
可以看到request对象中,里面有请求的方法,url,请求头,请求体等这些是请求的信息,然后我们看一下Options:
在这里我们可以看到是配置feign的连接时间和读取时间,默认的是10s和60s,虽然设置的是,但是我们在使用中请求超过1s就报错,这是因为它经过了Hystrix进行了包装,Hystrix请求第三方服务请求超过1s就会报错
然后我们回到LoadBalancerFeignClient类中:
你会看到它使用到了Ribbon,所以Feign使用的是Ribbon进行负载均衡的
红色标注的方法就是根据请求拿到响应
超时机制
上边也提到Feign超时时间,在这里我们来修改一下它的超时时间
官方文档:
他有两种方式进行配置,第一个可以对指定某一个服务进行配置,在这里我们使用第二种方式就可以
总结:
- ribbon和Feign中选择Feign是因为它集成了ribbon,写起来更加清晰,并且采用的是注解的方式,配置熔断等很是方便
- Feign默认的读取超时时间是60s,但是由于Hystrix所以默认是1s