springcloud之负载均衡

在springcloud中,服务端实现负载均衡,我所知道的是通过ribbon实现的

而通过ribbon实现的负载均衡目前在用的比较多的是 feign 和 restTemplate两种

feign: 已经集成了ribbon,默认是轮训算法,当然也可以通过配置更改loadbalacned算法

restTemplete: 需要配置集成ribbon 方法如下(在启动类中加入)

@Bean

@LoadBalanced

RestTemplate   restTemplate(){

return new RestTemplate();

}

两者比较

restTemplate经过上述配置后,两者其实并无差异,都可以远程调用服务,并具有负载均衡的功能,

但是就如同筷子和勺子一样,都可以吃饭,但是他们在某一方面比较出众.

先说下用法

restTemplate:

springcloud之负载均衡_第1张图片
具体调用方法

为了清楚,我再粘贴一个eureka注册列表

springcloud之负载均衡_第2张图片
调用的服务名字,必须与此一致

Feign:

springcloud之负载均衡_第3张图片
只需要调用GetHello接口,即可以调用到ribbon-provider服务

结论:二者调用 都比较方便,而且feign实现方式更加优雅,不需要写任何路径,他们都可以实现服务直接的相互调用,返回预期结果

相信细心的小伙伴,看到了 fallback 这个是feign的附加功能(个人理解),经过配置它会进行一个熔断,然后走GetHelloBack类中的方法,使得当 ribbon-provider出现故障的时候,调用他的服务可以很快得到一个结果,增加客户体验,也可以防止"雪崩"发生

springcloud之负载均衡_第4张图片
springcloud之负载均衡_第5张图片

而我之前也说了,两者都有各自的长处,优点,这个就是feign的优点,而restTemplate则无(也许有,但是我不知道),restTemplate在另一方更加优秀,即调用第三方接口,如:微信支付等等.

为什么这么说呢?因为如果要调用第三方接口,一般是需要httpclient去调用的,但是restTemplate 可以很优雅的去调用,并很清晰的标注返回值类型.而feign 当然也可以调用第三方接口,只是没有这么简便.

这里面都是用的ribbon 实现的负载均衡,而默认都是轮询算法,当然也可以自定义ribbon去启用其他的ribbon算法.

所以说,两者都可以远程调用服务,但是我想说的是,就还是我之前举得例子,筷子勺子都可以吃饭,只是在各自的有各自的优势,长处,你非要那么用也是可以的.

你可能感兴趣的:(springcloud,java,ribbon,eureka,接口,zookeeper)