前言
这篇文章在上几篇文章的基础上,搭建负载均衡,有集群,必然有负载均衡,这篇文章,还是现讲负载均衡使用,然后下篇文章讲负载均衡源码底层实现
上文:Eureka集群(Eureka详解)
负载均衡在SpringCloud中非常好实现,很简单
准备
负载均衡是针对服务器而言的,所以首先我们要搭建三个服务器,形成集群,上篇文章讲了Eureka的集群
上述操作执行三次,我们集群搭建了三个服务器
一、负载均衡Ribbon
因为Eureka中已经集成了Ribbon,所以我们无需引入新的依赖。直接修改代码:
在客户端的RestTemplate的配置方法上添加@LoadBalanced
注解:
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
修改调用方式,不再手动获取ip和端口,而是直接通过服务名称调用:
package com.czxy.userconsumerdemo.dao;
import com.czxy.userconsumerdemo.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import java.util.List;
@Component
public class UserDao {
@Autowired
@LoadBalanced
private RestTemplate restTemplate;
// 必须导入org.springframework.cloud.client.discovery.DiscoveryClient
@Autowired
private DiscoveryClient discoveryClient;
public User queryUserById(Long id){
// 地址直接写服务名称即可
String url = "http://user-service/user/"+id;
// 使用restTemplate发起请求
ResponseEntity<User> entity = restTemplate.getForEntity(url, User.class);
// 获取返回对象
User user = entity.getBody();
return user;
}
}
访问页面,查看结果:
这就是负载均衡实现,一个注解,一段修改,SpringCloud就帮我们实现了,很简单开发
下篇文章详解Ribbon的底层原理,以及我为什么断定已经实现了负载均衡
祝你幸福
送你一首歌《I Just Wanna Run》The Downtown Fiction
附图:《I Just Wanna Run》