(1)在启动springboot项目时,由于在项目的启动类上添加了@EnableFeignClient
注解,这一注解的处理逻辑会触发扫描classPath中所有被@FeignClient
注解的类,由于这些类是接口类,从而将这些接口类通过动态代理生成对应的实现类注入到spring的容器中;
(2)通过@FeignClient
这一注解,反射读取到@FeignClient
中的服务名,执行服务发现过程;
(3)通过调用动态代理的接口类,将请求信息进行封装动态生成Request请求;
(4)交由Ribbon进行负载均衡,挑选出一个健康的服务提供者实例;
(5)通过 Client 携带 Request 调用远端服务,通过反射读取到SpringMVC的注解获得请求路径、参数等配置信息;
(6)序列化反序列化,发送请求,获得响应从而返回数据;