优化基于CID 的用户统计
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
package com.sdm.gateway2;
|
||||
|
||||
|
||||
import com.sdm.gateway2.route.CustomLoadBalancerClient;
|
||||
import com.sdm.common.config.CustomLoadBalancerClient;
|
||||
import org.springframework.boot.SpringApplication;
|
||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
|
||||
|
||||
@@ -1,85 +0,0 @@
|
||||
package com.sdm.gateway2.route;
|
||||
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.ObjectProvider;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.cloud.client.ServiceInstance;
|
||||
import org.springframework.cloud.client.loadbalancer.DefaultResponse;
|
||||
import org.springframework.cloud.client.loadbalancer.EmptyResponse;
|
||||
import org.springframework.cloud.client.loadbalancer.Request;
|
||||
import org.springframework.cloud.client.loadbalancer.Response;
|
||||
import org.springframework.cloud.loadbalancer.core.ReactorServiceInstanceLoadBalancer;
|
||||
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
|
||||
import org.springframework.stereotype.Component;
|
||||
import reactor.core.publisher.Mono;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class CustomLoadBalancerClient implements ReactorServiceInstanceLoadBalancer {
|
||||
|
||||
@Value("${serverType}")
|
||||
private int serverType;
|
||||
@Value("${serverIp}")
|
||||
private String serverIp;
|
||||
|
||||
private final AtomicInteger atomicInteger = new AtomicInteger(0);
|
||||
|
||||
// 服务列表
|
||||
private final ObjectProvider<ServiceInstanceListSupplier> serviceInstanceListSupplierProvider;
|
||||
|
||||
public CustomLoadBalancerClient(ObjectProvider<ServiceInstanceListSupplier> serviceInstanceListSupplierProvider) {
|
||||
this.serviceInstanceListSupplierProvider = serviceInstanceListSupplierProvider;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Mono<Response<ServiceInstance>> choose(Request request) {
|
||||
ServiceInstanceListSupplier supplier = serviceInstanceListSupplierProvider.getIfAvailable();
|
||||
assert supplier != null;
|
||||
return supplier.get().next().map(serviceInstances -> getInstanceResponse(serviceInstances, request));
|
||||
}
|
||||
|
||||
/**
|
||||
* 负载均衡获取服务
|
||||
*
|
||||
* @param instances instances
|
||||
* @return Response<ServiceInstance>
|
||||
*/
|
||||
private Response<ServiceInstance> getInstanceResponse(List<ServiceInstance> instances, Request request) {
|
||||
if (instances.isEmpty()) {
|
||||
log.error("服务器列表为空");
|
||||
return new EmptyResponse();
|
||||
}
|
||||
// log.info("request url:{}" + url);
|
||||
// return new DefaultResponse(instances.get(0));
|
||||
ServiceInstance serviceInstance = null;
|
||||
// 0单机处理,1负载均衡轮询
|
||||
if (serverType == 0) {
|
||||
// DefaultRequestContext requestContext = (DefaultRequestContext) request.getContext();
|
||||
// RequestData clientRequest = (RequestData) requestContext.getClientRequest();
|
||||
// String url = clientRequest.getUrl().toString();
|
||||
for (ServiceInstance instance : instances) {
|
||||
if (instance.getHost().equals(serverIp)) {
|
||||
serviceInstance = instance;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//serviceInstance = instances.get(0);
|
||||
log.info("转发到服务器:" + serviceInstance.getHost());
|
||||
} else {
|
||||
// 获取当前的调用编号(每来一次请求则累加1)
|
||||
int sequence = atomicInteger.getAndIncrement();
|
||||
// 达到1000清零
|
||||
if (sequence == 1000) {
|
||||
atomicInteger.set(0);
|
||||
}
|
||||
// 调用编号与服务器个数取余
|
||||
int index = sequence % instances.size();
|
||||
log.info("负载均衡到服务器:" + instances.get(index).getHost());
|
||||
serviceInstance = instances.get(index);
|
||||
}
|
||||
return new DefaultResponse(serviceInstance);
|
||||
}
|
||||
}
|
||||
@@ -104,7 +104,7 @@ logging:
|
||||
org.springframework.cloud.gateway: INFO
|
||||
reactor.netty: INFO
|
||||
|
||||
# 0单机处理,1负载均衡轮询
|
||||
# 0单机处理,可以指向本地,1负载均衡轮询
|
||||
serverType: 0
|
||||
#serverIp: 192.168.65.161
|
||||
serverIp: 192.168.65.73
|
||||
Reference in New Issue
Block a user