ribbon本地负载均衡算法: 某个接口的总请求数%服务器集群总数 = 实际调用的服务器的下标
具体模拟代码如下
package com.wangcj.api.controller;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class SimulateRibbonController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private DiscoveryClient discoveryClient;
//总请求数
private AtomicInteger reqCount = new AtomicInteger(1);
//订单服务调用会员服务
@RequestMapping("/getSimulateOrder")
public String getOrder() {
List<ServiceInstance> instances = discoveryClient.getInstances("app-member");
if(!CollectionUtils.isEmpty(instances)) {
//集群总数
int totalCount = instances.size();
//获取调用的服务器的下标数
int index = reqCount.get() % totalCount;
String result = restTemplate.getForObject(instances.get(index).getUri().toString()+"/getMember", String.class);
//请求数+1
reqCount.getAndIncrement();
return result;
}
return null;
}
}