在springcloud中,服务端实现负载均衡,我所知道的是通过ribbon实现的
而通过ribbon实现的负载均衡目前在用的比较多的是 feign 和 restTemplate两种
feign: 已经集成了ribbon,默认是轮训算法,当然也可以通过配置更改loadbalacned算法
restTemplete: 需要配置集成ribbon 方法如下(在启动类中加入)
@Bean
@LoadBalanced
RestTemplate restTemplate(){
return new RestTemplate();
}
两者比较
restTemplate经过上述配置后,两者其实并无差异,都可以远程调用服务,并具有负载均衡的功能,
但是就如同筷子和勺子一样,都可以吃饭,但是他们在某一方面比较出众.
先说下用法
restTemplate:
为了清楚,我再粘贴一个eureka注册列表
Feign:
结论:二者调用 都比较方便,而且feign实现方式更加优雅,不需要写任何路径,他们都可以实现服务直接的相互调用,返回预期结果
相信细心的小伙伴,看到了 fallback 这个是feign的附加功能(个人理解),经过配置它会进行一个熔断,然后走GetHelloBack类中的方法,使得当 ribbon-provider出现故障的时候,调用他的服务可以很快得到一个结果,增加客户体验,也可以防止"雪崩"发生
而我之前也说了,两者都有各自的长处,优点,这个就是feign的优点,而restTemplate则无(也许有,但是我不知道),restTemplate在另一方更加优秀,即调用第三方接口,如:微信支付等等.
为什么这么说呢?因为如果要调用第三方接口,一般是需要httpclient去调用的,但是restTemplate 可以很优雅的去调用,并很清晰的标注返回值类型.而feign 当然也可以调用第三方接口,只是没有这么简便.
这里面都是用的ribbon 实现的负载均衡,而默认都是轮询算法,当然也可以自定义ribbon去启用其他的ribbon算法.
所以说,两者都可以远程调用服务,但是我想说的是,就还是我之前举得例子,筷子勺子都可以吃饭,只是在各自的有各自的优势,长处,你非要那么用也是可以的.