Ribbon的基本使用
一. 首先需要搭建两个服务,并且两个服务都是Spring Cloud工程
服务的提供者 spring-cloud-order-service
配置两个节点,一个是 8080端口,一个是8082端口
@RestController
public class OrderService {
@Value("${server.port}")
private int port;
@GetMapping("/orders")
public String getAllOrder(){
System.out.println("port:"+port);
return "Return All Order";
}
}
服务消费者 spring-cloud-user-service
- 添加jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--ribbon客户端负载均衡的jar包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
- 在application.properties中配置服务提供者的地址列表
# 配置指定服务的提供者的地址列表
spring-cloud-order-service.ribbon.listOfServers=\
localhost:8080,localhost:8082
- 添加伪代码
@RestController
public class UserController {
@Autowired
private RestTemplate restTemplate;
/**
* 注入RestTemplate
* @param restTemplateBuilder
* @return
*/
@Bean
@LoadBalanced //添加此注解就可以针对RestTemplate在请求getForObject()方法中进行拦截,实现客户端的负载均衡
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder){
return restTemplateBuilder.build();
}
@GetMapping("/orders")
public String getOrders(){
// 调用订单的服务获得订单信息
// HttpClient / RestTemplate /OkHttp /JDK HttpUrlConnection (默认的几种远程连接的客户端)
/* ServiceInstance serviceInstance=loadBalancerClient.choose("spring-cloud-order-service");
String url=String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort()+"/orders");*/
//spring-cloud-order-service:服务提供者的服务名称,ribbon会根据服务名称解析到配置文件中的服务地址列表,进行负载均衡调用
return restTemplate.getForObject("http://spring-cloud-order-service/orders",String.class);
}
}
二. 查询调用结果
实现了负载均衡的功能。