Ribbon=客户端负载均衡+RestTemplate 远程调用
Ribbon
在工作时分成两步:
第一步,先选择
EurekaServer
,它优先选择在同一个区域内负载较少的
server
。
第二步,再根据用户指定的策略,在从
server
取到的服务注册列表中选择一个地址。其
中
Ribbon
提供了多种策略。比如:
轮询
、
随机
和根据
响应时间
加权。
引入依赖
<!-- 引入ribbon实现远程调用和负载均衡功能 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
在用户服务中编写一个配置类
在用户服务,给容器中注入一个 RestTemplate 并使用 Ribbon 进行负载均衡调用
@Configuration
public class RestTemplateConfig {
@LoadBalanced //开启客户端负载均衡
@Bean
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
使用 RestTemplate 在service层进行远程调用
@Service
public class OrderService {
@Autowired
private OrderDao orderDao;
@Autowired
private RestTemplate restTemplate;
public Order findOrder(Integer id){
return orderDao.findOrder(id);
}
public Map finOrderAndUser(Integer id){
Order order = orderDao.findOrder(id);
Map map = new HashMap<>();
//CLOUD-EUREKA-PROVIDER8001调用服务在eureka注册中心的服务名称
User user = restTemplate.getForObject("http://CLOUD-EUREKA-PROVIDER8001/user/find?id="+id, User.class);
map.put("order",order);
map.put("user",user);
return map;
}