使用SpringCloud实现Java分布式开发【part-2】:Ribbon负载均衡的介绍及使用方式

SpringCloud简介

Spring Cloud是Spring旗下的项目之一
Spring Cloud并不是一个组件 而是许多组件的集合
其将当下非常流行的一些技术整合到了一起 实现了多个分布式开发中的重要功能
协调了分布式环境中各个系统 并且为各类服务提供模板性的配置

其主要涉及的组件包括:

  • Eureka:注册中心
  • Zuul或Spring Cloud Gateway:服务网关
  • Ribbon:负载均衡
  • Feign:服务调用
  • Hystrix或Resilience4j:熔断器

【在本篇中 将介绍Ribbon负载均衡】

Ribbon负载均衡

负载均衡 顾名思义 就是让服务的负载更加均衡的…(废话)

在实际环境中往往会开启很多个服务端的集群 此时获取的服务列表中就会有多个
此时 到底该访问哪一个 一般在这种情况下就需要编写负载均衡算法 在多个实例列表中选择最优的
Eureka中已经集成了负载均衡组件Ribbon 只需简单修改代码即可使用

Ribbon是一个负载均衡器 有助于控制HTTP和TCP客户端的行为
为Ribbon配置服务提供者列表后 Ribbon可基于某种负载均衡算法 自动地帮助服务消费者去进行请求

Ribbon默认提供了很多的负载均衡算法 例如轮询算法 随机算法 等等
轮询算法即为轮着进行 例如共有AB两个服务提供者 那么第一次访问A服务提供者 则第二次必定访问B服务提供者 第三次访问A服务提供者 以此类推
随机算法顾名思义 是随机的
当然 也可为Ribbon实现自定义的负载均衡算法

Ribbon默认使用轮询算法

在导入Eureka客户端的依赖包的时候同时也自动导入了Ribbon的相关包:
在这里插入图片描述

一、负载均衡的过程:

在执行RestTemplate发送地址请求的时候 会使用Ribbon负载均衡器进行拦截 然后根据服务名获取服务地址列表
再使用Ribbon的负载均衡算法从服务地址列表中选择一个服务地址 最后 访问该服务地址 获取数据

二、使用步骤:

为服务消费者的启动类中的RestTemplate实例化方法添加@LoadBalanced注解以开启客户端负载均衡功能:

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

使用步骤很简单
在服务消费者的接口类中 直接使用服务名来进行负载均衡即可:

@RestController
@RequestMapping("/consumer")
public class ConsumerController {
    
    

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/{id}")
    public User queryById(@PathVariable Long id)
    {
    
    
        // Ribbon负载均衡
        String url="http://user-service/user/"+id;

        return restTemplate.getForObject(url,User.class);
    }
}

猜你喜欢

转载自blog.csdn.net/Piconjo/article/details/108712639