1.服务器端的负载均衡
通过Nginx的负载均衡算法实现负载均衡,由于Nginx是部署在一个物理机上,所以叫服务器端的负载均衡。
2.客户测端的负载均衡
例如:有两个微服务集群 User-Center 与 Content-Center. 当User-Center中的一个实例 调用Content-Center是可以使用
List<ServiceInstance> instances = discoveryClient.getInstances("Content-Center");
这样调用方就会获取到被调方的多个实例,可以在调用方写一些负载均衡算法再通过 RestTemplate来 调用具体哪个实例。 这样就在客户端测实现了负载均衡。
随机负载均衡例子:
@Autowired
DiscoveryClient discoveryClient;
public ShareDTO findById(Integer id) {
// 获取分享详情
Share share = this.shareMapper.selectByPrimaryKey(id);
//share里没有用户的信息,所以要调用user服务来获取
Integer userId = share.getUserId();
List<ServiceInstance> instances = discoveryClient.getInstances("user-center");
List<String> url_List = instances.stream().map(
instance -> instance.getUri().toString() + "/users/{id}").collect(Collectors.toList());
int index = ThreadLocalRandom.current().nextInt(url_List.size());
log.info("ShareService.findById.targetUrl:{}",url_List.get(index));
UserDTO userDTO = restTemplate.getForObject(url_List.get(index),UserDTO.class,userId);
ShareDTO shareDTO = new ShareDTO();
BeanUtils.copyProperties(share,userDTO);
shareDTO.setWxNickname(userDTO.getWxNickname());
return shareDTO;
}
|