ribbon是一个客户端负载均衡器,会从注册中心拉取可用服务,当客户端需要获取服务请求时,ribbon能够解析服务地址并实现负载均衡
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
@Service("orderService")
public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements OrderService {
@Autowired
public RestTemplate restTemplate;
public Order getOrder(Long id){
Order order = getById(id);
User user = restTemplate.getForObject("http://user-service/user/" + order.getUserId(), User.class);
order.setUser(user);
return order;
}
}
其中“user-service”为微服务名称
public IRule ribbonRule() {
return new NacosRandomWithWeightRule();
}
\# 被调用的微服务名
user-service:
ribbon:
\# 自定义的负载均衡策略(基于随机&权重)
NFLoadBalancerRuleClassName: com.tuling.mall.ribbondemo.rule.NacosRandomWithWeightRule
Ribbon默认懒加载,意味着只有在发起调用的时候才会创建客户端。在进行服务调用的时候,如果网络情况不好,第一次调用会超时。
开启饥饿加载,解决第一次调用慢的问题:
ribbon:
eager-load:
\# 开启ribbon饥饿加载
enabled: true
\# 配置mall-user使用ribbon饥饿加载,多个使用逗号分隔
clients: user-service