Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。先来学习一下简单应用
案例:一个用户服务调用多个订单服务
1.maven依赖
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.2.10.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
</dependencies>
2.配置文件
order-sevice是服务提供者的服务名称
server.port = 8082
order-service.ribbon.listOfServers=\
localhost:8081,localhost:8083
3.LoadBalancerClient调用
@Resource
private RestTemplate restTemplate;
@Resource
private LoadBalancerClient loadBalancerClient;
@RequestMapping("findUser")
public String findUser() {
ServiceInstance serviceInstance = loadBalancerClient.choose("order-service");
String url = String.format("http://%s:%s", serviceInstance.getHost(),
serviceInstance.getPort() + "/order");
return restTemplate.getForObject(url, String.class);
}
4.服务提供者的代码
@RestController
public class OrderController {
@Value("${server.port}")
private Integer port;
@RequestMapping("order")
public String getOrder() {
System.out.println("port: " + port);
return "order";
}
}
5.服务提供者启动两个端口的服务:8081,8083(具体端口自己指定)
在一个idea中启动两个端口的服务的方法:编辑配置,点击+号,新增一个springboot应用,使用-Dserver.port指定端口即可
6.浏览器中访问本地8082端口:http://localhost:8082/findUser
7.多调用几次,可以看到是轮询调用的。