简介
- nginx:服务器端负载均衡
- ribbon: 客户端负载均衡
- Ribbon是Netflix发布的负载均衡器,它可以帮我们控制HTTP和TCP客户端的行为。只需为Ribbon配置服务提供者地址列表,Ribbon就可基于负载均衡算法计算出要请求的目标服务地址。
- Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机、响应时间加权等——当然,为Ribbon自定义负载均衡算法也非常容易,只需实现IRule 接口即可。
图解
Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,选择其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的大致架构。
客服端配置
以shop-consumer-movie服务为例
- 修改MovieApplication.java
- 修改调用方式
目标服务改成了http://shop-provider-user/users/{id} ,也就是http://{目标服务名称}/{目标服务端点} 的形式,Ribbon会自动在实际调用时,将目标服务名替换为该服务的IP和端口。
@RequestMapping("/movies")
@RestController
public class MovieController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/users/{id}")
public User findById(@PathVariable Long id) {
// 这里用到了RestTemplate的占位符能力
// User user = this.restTemplate.getForObject("http://localhost:8000/users/{id}", User.class, id);
User user = this.restTemplate.getForObject("http://shop-provider-user/users/{id}", User.class, id);
// ...电影微服务的业务...
return user;
}
}
服务端多端口启动
访问http://localhost:8010/movies/users/1 多次,会发现两个user服务实例都会打印日志。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。