在SpringCloud微服务中调用都不是直接用Ribbon进行服务调用,因为那样的化项目中的代码量会增加很多,微服务之间的调用是用Feign来进行调用,下面就是普通的一个接口调用例子
这样就可以进行服务间的调用了,那么Feign底层源码是如何调用Ribbon对服务提供者进行负载均衡的调用呢,这里调用的源码入口是FeignInvocationHandler这个类,调用上图的orderFeignService.findOrderByUserId(id)其实就是在调用这个FeignInvocationHandler的invoke方法
其实Feign底层是基于动态代理实现的,这里面的细节我们放到后面再讲
因为方法的名字是findOrderByUserId,这里会进到this.dispatch.get(method)).invoke()方法,这里会进到SynchronousMethodHandler类的invoke方法里面
这里首先构造了一个RequestTemplate请求工具类,然后在一个while死循环里面进行服务调用的逻辑,在catch块里面