Ribbon是Netflix开发的一个负载均衡组件,与其他SpringCloud组件结合可以发挥出强大作用,它的负载策略有多种,默认轮询,可配置超时重试
Ribbon与Nginx不一样,nginx是服务端负载均衡,Ribbon是客户端负载均衡,具体表现为客户端从注册中心拿到服务的所有实例,然后以负载均衡方式去调用服务,默认以轮询的方式去调用服务实例
服务提供者provider-service提供/hello接口
@RestController
public class IndexController {
@GetMapping("/hello")
public String hello(String name , HttpServletRequest request){
//返回端口信息
return " From Port : " + request.getServerPort() + " , hello " + name;
}
}
服务调用者添加ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
添加RibbonConfig配置
/**
* ribbon负载均衡配置
* ribbon有7种策略,随机、轮询、最小并发、响应时间加权等策略
*/
@Configuration
public class RibbonConfig {
@Bean
public IRule ribbonRule() {
return new RandomRule();
}
/**
* 添加LoadBalanced,使RestTemplate已负载均衡的方式调用服务
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
添加一个控制器,注入RestTemplate,访问服务提供者
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/sayHello")
public String sayHello(String name) {
String url = "http://provider-service/hello?name=" + name;
return restTemplate.getForObject(url, String.class);
}
}
启动两个provider-service服务,调用/sayHello接口会发现随机调用provider-service服务。
网友评论