实现负载均衡不只一种方式,有网关层面的,有代码层面的,都可以。
1、dns服务器实现负载均衡。
2、nginx实现负载均衡。见nginx upstream。
3、spring中@LoadBalance
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
注:如果加了@LoadBalanced注解,那么多节点请求地址不能再用ip了,因为他会根据的服务名查找,如果使用ip会报错。
报错 Service Instance cannot be null, serviceId: 192.168.0.1
这就是加上@LoadBalanced后还用ip的报错提示。
方案一:
改ip为服务名。
方案二:
如果没有服务名,也可以重写个restTemplate,去掉@LoadBalanced注解即可。
如果不加@LoadBalanced就不会负载均衡了吗
实际我觉得可加可不加吧,如果地址是域名开头,外层nginx已经做了负载均衡,所以还好吧。不太清楚@LoadBalanced这个负载均衡的必要性。