Ribbon 与 FeignClient、RestTemplate 的关系

Ribbon

Ribbon是Netflix公司开源的一个负载均衡的项目,是一个基于 HTTP、TCP的客户端负载均衡器.

Ribbon 与 FeignClient、RestTemplate 的关系_第1张图片

上面的都是服务端负载均衡,客户端负载均衡与服务端负载均衡的区别在于客户端要维护一份服务列表,Ribbon从
Eureka获取服务列表,Ribbon根据负载均衡算法直接请求到具体的微服务,中间省去了负载均衡服务器。

常用的负载均衡算法有: 轮循、随机、加权轮循、加权随机、地址哈希等方法。

与Nginx的区别

Ribbon负责客户端(服务消费者)的负载均衡,而Nginx负责的是服务端的负载均衡。

 

RestTemplate

RestTemplate 是远程调用Http的工具,是对java底层http的封装,使用RestTemplata用户可以不再关注底层的连接建立,并且RestTemplata不仅支持Rest规范,还可以定义返回值对象类型。

RestTemplata支持本地负载均衡,配合Ribbon一起使用

例如:

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

或  添加bean 到启动类中

Ribbon 与 FeignClient、RestTemplate 的关系_第2张图片

 

Ribbon 与 FeignClient、RestTemplate 的关系_第3张图片

详情查看:https://blog.csdn.net/xiao_jun_0820/article/details/78917215 

 

FeignClient

Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。

Feign并且集成了Ribbon实现客户端负载均衡调用。

Spring Cloud Netflix 的微服务都是以 HTTP 接口的形式暴露的,所以可以用 Apache 的 HttpClient 或 Spring 的 RestTemplate 去調用

而 Feign 是一個使用起來更加方便的 HTTP 客戶端,它用起來就好像調用本地方法一樣,完全感覺不到是調用的遠程方法

总结起来就是:发布到注册中心的服务方接口,是 HTTP 的,也可以不用 Ribbon 或者 Feign,直接浏览器一样能够访问

只不过 Ribbon 或者 Feign 调用起来要方便一些,最重要的是:它俩都支持软负载均衡

注意:spring-cloud-starter-feign 里面已经包含了 spring-cloud-starter-ribbon(Feign 中也使用了 Ribbon)

从实践上看,采用feign的方式更优雅(feign内部也使用了ribbon做负载均衡)。

@FeignClient(value = "PRODUCT-DATA-SERVICE")// 被调用的模块名
public interface ProductClientFeign {
 
    @GetMapping(value = "/products") //被调用的模块的接口
    public List listProdcuts();
}

注意:启动类中得添加 @EnableFeignClients //启用Feign
 

你可能感兴趣的:(Java)