Ribbon的使用

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。

可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

我们通常所说的负载均衡都指的是服务端负载均衡,比如Nginx,Ribbon是一个基于客户端负载均衡,在客户端负载均衡中,所有客户端节点都维护着自己要访问的服务端清单,而这些服务端端清单来自于服务注册中心,比如上一章我们介绍的Eureka服务端。

 

 

 将

 通过Spring Cloud Ribbon的封装,我们在微服务架构中使用客户端负载均衡调用非常简单,只需要如下两步:

        ▪️服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。

        ▪️服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用,如下

  

@SpringBootApplication
public class OrderServiceApplication {

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

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

 通过注入RestTemplate使用:(其中 “product-service”就是自己向Eureka中注册的Provider名称)

 @Autowired
    private RestTemplate restTemplate;
    @Override
    public ProductOrder save(Integer userId, Integer productId) {
        restTemplate.getForObject("http://product-service/api/v1/product/findById?id="+productId,Object.class);

 一下是两种实现连接的方式:

@Autowired
        private RestTemplate restTemplate;
        @Autowired
        private LoadBalancerClient loadBalanced;
        @Override
        public ProductOrder save(Integer userId, Integer productId) {
            //远程调用方法1:
            Map<String,Object> productMap = restTemplate.getForObject("http://product-service/api/v1/product/findById?id=" + productId, Map.class);
            //远程调用方法2:
            ServiceInstance instance = loadBalanced.choose("product-service");
            String url = String.format("http://%s:%s/api/v1/product/findById?id=" + productId, instance.getHost(), instance.getPort());
            RestTemplate restTemplate = new RestTemplate();
            Map<String,Object> productMap = restTemplate.getForObject(url, Map.class);

 

        这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。

posted @ 2020-03-01 23:22  Catbir  阅读(210)  评论(0编辑  收藏  举报