SpringCloud之ribbon

Spring Cloud Ribbon是Netflix的客户端负载均衡工具,用于在客户端进行服务间调用的负载均衡。它提供了多种负载均衡策略,如简单轮询。在使用时,Ribbon会集成在Eureka依赖中,通过@RibbonClient注解配置,并可通过IRule接口自定义负载均衡策略。默认使用轮询策略,但可以通过配置文件或Java配置自定义策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

官方文档

ribbon是什么?

 Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。

简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。

客户端负载均衡?? 服务端负载均衡??

 我们用一张图来描述一下这两者的区别

服务端的负载均衡是一个url先经过一个代理服务器(这里是nginx),然后通过这个代理服务器通过算法(轮询,随机,权重等等..)反向代理你的服务,l来完成负载均衡

 而客户端的负载均衡则是一个请求在客户端的时候已经声明了要调用哪个服务,然后通过具体的负载均衡算法来完成负载均衡

如何使用: 

 首先,我们还是要引入依赖

 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
 </dependency>

但是,eureka已经把ribbon集成到他的依赖里面去了,所以这里不需要再引用ribbon的依赖

在配置类上加@RibbinClient或者@RibbonClients

@Configuration
@ComponentScan("com")
@RibbonClients({
		@RibbonClient(name="server-user",configuration = UserConfig.class),
		@RibbonClient(name="server-order",configuration = OrderConfig.class)
})
public class AppConfig {

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

}

 根据官网上到说明UserConfig必须加上@Configuration,且不能在@ComponentScan扫描包路径下

@Configuration
public class UserConfig {

	@Bean
	public IRule iRule(){
		return new RoundRobinRule();
	}
}

 controller 

@RestController
public class TestController {

	@Autowired
	RestTemplate restTemplate;

	@RequestMapping("/getUser")
	public Map getUser(){
		return (Map)restTemplate.getForObject("http://server-user/hello",Object.class);
	}
}

因为ribbon默认使用轮询作为负载均衡策略,所以会重复出现

核心组件:IRule

IRule是什么? 它是Ribbon对于负载均衡策略实现的接口, 怎么理解这句话? 说白了就是你实现这个接口,就能自定义负载均衡策略, 自定义我们待会儿来讲, 我们先来看看他有哪些默认的实现

上面是通过javaconfig方式,再看看配置文件的方式

官网上说通过配置文件的方式优先于javaconfig方式,但是我测试的结果却不是这样的,只要用一种方式配置就没影响

<clientName>.ribbon.NFLoadBalancerClassName: Should implement ILoadBalancer
<clientName>.ribbon.NFLoadBalancerRuleClassName: Should implement IRule
<clientName>.ribbon.NFLoadBalancerPingClassName: Should implement IPing
<clientName>.ribbon.NIWSServerListClassName: Should implement ServerList
<clientName>.ribbon.NIWSServerListFilterClassName: Should implement ServerListFilter

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值