【文件属性】:
文件名称:02_SpringCloud客户端负载均衡Ribbon.md
文件大小:5KB
文件格式:MD
更新时间:2023-01-23 04:41:47
ribbon 负载均衡
SpringCloud的复杂均衡 属于客户端;nginx辅助均衡属于服务器端 ,restTemplate 进行RPC调用.对外使用 rest http方式。DiscoveryClient 可以自己实现一个负载均衡的算法(使用请求总数 % 服务列表个数).算法文件跟新一下
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class AppConsulClient {
@Autowired
private DiscoveryClient discoveryClient;
@RequestMapping("/getServer")
public String getServerInstance(){
List list = discoveryClient.getInstances("consul-order");
for (ServiceInstance serviceInstance : list) {
if(serviceInstance !=null ){
return serviceInstance.getUri().toString()+"---"+serviceInstance.getServiceId();
}
}
return null;
}
@Resource
private RestTemplate restTemplate;
@RequestMapping("/disconverClient")
public String getDiscoveryClient(){
//获取服务列表
String serverurl = getServerurl();
if(StringUtils.isEmpty(serverurl)){
return "请求列表为null";
}
System.out.println("请求服务地址:"+serverurl);
return restTemplate.getForObject(serverurl,String.class);
}
private Integer requestCount = 1;
@RequestMapping("/getServerurl")
public String getServerurl(){
List list = discoveryClient.getInstances("consul-order");
if(list == null && list.size() ==0){
return null;
}
//获取服务注册列表的个数
int size = list.size();
int index = requestCount % size;
requestCount++;
return list.get(index).getUri().toString();
}
/**
* @LoadBalanced 开启本地复杂均衡
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
public static void main(String[] args) {
SpringApplication.run(AppConsulClient.class);
}
}