springcloud学习-Ribbon负载均衡
程序员文章站
2024-03-22 18:55:58
...
Ribbon是什么?
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具
Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端实现负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中Load Balancer后面的所有机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。
负载均衡?
所谓的负载均衡就是将用户的请求平均到多个服务上,从而达到系统的HA(高可用)
Ribbon使用
- 服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心(集群)
- 服务消费者直接通过调用被
@LoadBalanced
注解修饰过的RestTemplate
来实现面向服务的接口调用
- 首先引入Ribbon依赖,Ribbon的使用依赖Eureka
<!-- Ribbon-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<!-- eureka-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
- 在Eureka Client(Eureka客户端)也就是我们的服务消费者,为RestTemplate配置类添加@LoadBalanced注解即可,如下:
@Configuration
public class ConfigBean {
/*配置负载均衡实现RestTemplate*/
@Bean
@LoadBalanced //Ribbon注解
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 使用了Ribbon后,我们可以根据服务的名字来访问,这样可以直接调用服务,不必再担心IP跟端口的问题,如下:
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate;
// private static final String Rest_URL_PREFIX = "http://localhost:8001"; //以前的写死了ip和端口号
private static final String Rest_URL_PREFIX = "http://SPRINGCLOUD-PROVIDER-DEPT"; //使用Ribbon后根据服务名字来访问,不需要指定ip和端口
}
自定义Ribbon的负载均衡策略
- 自定义策略应该放在最外面的一层
Ribbon官方文档给出警告:
这个自定义的类不能放在@ComponentScan所扫描的当前包以及子包下,否则我们自定义的这个配置类就会被所有的Ribbon客户端所共享,也就是我们达不到特殊化指定的目的了。
- 添加自定义策略
/*
自定义Ribbon负载均衡策略 内容未写
*/
public class Rule extends AbstractLoadBalancerRule {
@Override
public void initWithNiwsConfig(IClientConfig iClientConfig) {
}
@Override
public Server choose(Object o) {
return null;
}
}
@Configuration
public class MyRule {
public IRule myRule(){
/*
return new RandomRule();为Ribbon默认的负载均衡策略 轮询
*/
return new Rule(); //调用自定义Ribbon负载均衡策略
}
}
- 在启动类添加相关配置,如下:
@SpringBootApplication
// 启动Eureka
@EnableEurekaClient
// @RibbonClient在启动时加载自定义Ribbon策略 name:负载均衡的微服务名称,configuration:自定义Ribbon策略
@RibbonClient(name = "SPRINGCLOUD-PROVIDER-DEPT",configuration = MyRule.class)
public class DeptConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DeptConsumerApplication.class, args);
}
}
推荐阅读
-
springcloud学习-Ribbon负载均衡
-
【spring cloud (二)】spring boot+spring cloud+nacos+gateway+ribbon负载均衡配置
-
4. 使用Ribbon实现客户端负载均衡,接上一篇:将服务注册到nacos中
-
SpringCloud与Consul集成实现负载均衡功能
-
SpringCloud Ribbon 负载均衡的实现
-
SpringCloud与Consul集成实现负载均衡功能
-
SpringCloud Ribbon 负载均衡的实现
-
详解SpringCloud Ribbon 负载均衡通过服务器名无法连接的神坑
-
#LVS学习(3)#LVS实现四层负载均衡--基于DR模式
-
Nginx学习之负载均衡