本文内容如有错误、不足之处,欢迎技术爱好者们一同探讨,在本文下面讨论区留言,感谢。
Spring Cloud Ribbon 是基于 Netflix Ribbon 实现,Spring Cloud 对其进行了一层封装。
Ribbon 基于 HTTP 和 TCP 的客户端负载均衡工具,可以让我们轻松地将面对服务的 REST 模块请求自动转换成客户端负载均衡的服务调用。
提供以下功能:
不过通过官网提供的消息 Spring Cloud Netflix Ribbon is now deprecated. 已经被弃用了,建议使用 Spring Cloud LoadBalancer 进行负载均衡,可以看下这篇说明。
Ribbon 主要作用是负载均衡,负载均衡又分为客户端负载均衡和服务端负载均衡,它们之间的区别在于:服务清单所在的位置。
负载均衡的概念:
客户端负载均衡是在 Spring Cloud Ribbon 中定义的。在分布式架构中,同一个Service 集群,当一个请求奔过来时,那么这多个 Service,Ribbon 通过策略决定本次请求使用哪个 Service 的方式就是客户端负载均衡。在 Spring Cloud 分布式框架中客户端负载均衡对开发者是透明的,只要使用 @LoadBalanced 就可以完成一个客户端负载均衡的创建。
上图 A服务消费者1 需要消费 B功能, 向 Eureka Server (选择负载较少的那个)查询 B服务的服务列表,然后根据用户指定的策略,从 Eureka Server 取到的服务注册列表中选择一个地址。
pom.xml 中配置 Ribbon 依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-ribbonartifactId>
dependency>
应用启动类上使用 @EnableDiscoveryClient 开启 Ribbon 客户端
@SpringBootApplication
@EnableDiscoveryClient
public class RibbonDemoApplication {
}
在 Controller 类上 使用 @RibbonClient 注解,name
服务名称 configuration
配置类
@RestController
@RibbonClient(name = "say-hello", configuration = SayHelloConfiguration.class)
public class ConsumerController {
@LoadBalanced
@Bean
RestTemplate restTemplate(){
return new RestTemplate();
}
@Autowired
RestTemplate restTemplate;
@RequestMapping("/hi")
private String helloConsumer(@RequestParam(value="name", defaultValue="Artaban") String name){
String greeting = this.restTemplate.getForObject("http://say-hello/greeting", String.class);
return String.format("%s, %s!", greeting, name);
}
}
SayHelloConfiguration 配置类
public class SayHelloConfiguration {
@Autowired
IClientConfig ribbonClientConfig;
@Bean
public IPing ribbonPing(IClientConfig config) {
return new PingConstant();
}
@Bean
public IRule ribbonRule(IClientConfig config) {
return new AvailabilityFilteringRule();
}
}
application.yml 配置文件内容
spring:
application:
name: ribbon-demo
server:
port: 8090
# stores 是自定义的
stores:
ribbon:
eureka:
enabled: false
listOfServers: localhost:8090,localhost:9092,localhost:9999
ServerListRefreshInterval: 15000
本文主要内容简单介绍了 Spring Cloud Ribbon ,以及其中的核心组件。
代码地址:github
《Spring Cloud 微服务实战》 翟永超 著
Spring Cloud Ribbon
Spring cloud 之Ribbon(一)基本使用
Spring Cloud Ribbon简介
Client Side Load Balancing with Ribbon and Spring Cloud(功能区和Spring Cloud的客户端负载平衡)
Netflix/ribbon
等风来,不如追风去。