美文网首页
5. springCloud ribbon实现服务消费

5. springCloud ribbon实现服务消费

作者: 呆叔么么 | 来源:发表于2019-11-28 16:57 被阅读0次

我们已经学会如何通过LoadBalancerClient接口来获取某个服务的具体实例,并根据实例信息来发起服务接口消费请求。但是这样的做法需要我们手工的去编写服务选取、链接拼接等繁琐的工作,对于开发人员来说非常的不友好。

1.认识ribbon

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTPTCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。

RibbonEureka联合使用时,ribbonServerList会被DiscoveryEnabledNIWSServerList重写,扩展成从Eureka注册中心中获取服务实例列表。同时它也会用NIWSDiscoveryPing来取代IPing,它将职责委托给Eureka来确定服务端是否已经启动。

我们在使用Spring Cloud Ribbon的时候,不论是与Eureka还是Consul结合,都会在引入Spring Cloud EurekaSpring Cloud Consul依赖的时候通过自动化配置来加载上述所说的配置内容,所以我们可以快速在Spring Cloud中实现服务间调用的负载均衡。

来看看如何使用Spring Cloud Ribbon来实现服务的调用以及客户端均衡负载。

2.修改启动类

为RestTemplate增加@LoadBalanced注解

@SpringBootApplication
public class LovingApplication {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(LovingApplication.class, args);
    }

}

3.修改调用controller

去掉原来通过LoadBalancerClient选取实例和拼接URL的步骤,直接通过RestTemplate发起请求。

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/contact/{goodsId}")
    public ServerResponse contact(@PathVariable("goodsId") Long goodsId) {
        GoodsInfo goodsInfo = restTemplate.getForObject("http://product/product/search/"+goodsId, GoodsInfo.class);
        return ServerResponse.createBySuccess(goodsInfo);
    }

4.ribbon 原理

上述RestTemplate的3种调用方式,及其以下组件的底层都是基于ribbon的负载均衡策略的
1.RestTemplate
2.Feign
3.Zuul
Ribbon主要内容由三部分组成:
1.ServerList
2.IRule
3.ServerListFilter
ServerList(获得服务列表)->ServerListFilter(过滤一部分服务)->IRule(根据规则选择服务)

相关文章

网友评论

      本文标题:5. springCloud ribbon实现服务消费

      本文链接:https://www.haomeiwen.com/subject/biubwctx.html