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);
}
}