服务调用方式
-
Eureka ->http://ip:port/path
-
Ribbon ->http://serviceName/path
-
Feign->@FeignClient(“service-name”)
Feign
-
简化远程调用,集成Ribbon,集成Hystrix
- Ribbon:利用负载均衡策略选定目标机器
- Hystrix:根据熔断器的开启状态,决定是否发起此次调用
-
动态代理
Feign是通过一个代理接口进行远程调用,这一步就是为了构造接口的动态代理对象,用来代理远程服务的真实调用,这样你就可以像调用本地方法一样发起HTTP请求,不需要像Ribbon或者Eureka那样在方法调用的地方提供服务名。在Feign中动态代理是通过
Feign.build
返回的构造器来装配相关参数,然后调用ReflectFeign的newInstance方法创建的。这里就应用到了Builder设计模式 -
Contract
协议,顾名思义,就像HTTP协议,RPC协议一样,Feign也有自己的一套协议的规范,只不过他解析的不是HTTP请求,而是上一步提到的动态代理类。通过解析动态代理接口+Builder模式,Contract协议会构造复杂的元数据对象MethodMetadata,这里面包含了动态代理接口定义的所有特征。接下来,根据这些元数据生成一系列MethodH