mirror of
https://gitee.com/mirrors/Spring-Cloud-Alibaba.git
synced 2021-06-26 13:25:11 +08:00
Code optimization for ans starter
This commit is contained in:
parent
a4f8cc7d28
commit
e163500980
@ -16,7 +16,7 @@ public class MigrateOnConditionClass extends MigrateOnCondition {
|
|||||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
boolean result = isPresent(conditionOnClass[0], classLoader)
|
boolean result = isPresent(conditionOnClass[0], classLoader)
|
||||||
|| isPresent(conditionOnClass[1], classLoader);
|
|| isPresent(conditionOnClass[1], classLoader);
|
||||||
log.info("the result of MigrateOnConditionClass is :" + result);
|
log.info("the result of match is :" + result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,7 +16,7 @@ public class MigrateOnConditionMissingClass extends MigrateOnConditionClass {
|
|||||||
@Override
|
@Override
|
||||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
||||||
boolean result = !super.matches(context, metadata);
|
boolean result = !super.matches(context, metadata);
|
||||||
log.info("the result of MigrateOnConditionMissingClass is :" + result);
|
log.info("the result of match is :" + result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,15 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
package org.springframework.cloud.alicloud.ans.migrate;
|
||||||
|
|
||||||
|
import com.netflix.client.config.IClientConfig;
|
||||||
|
import com.netflix.loadbalancer.ILoadBalancer;
|
||||||
|
import com.netflix.loadbalancer.Server;
|
||||||
|
import com.netflix.loadbalancer.ServerList;
|
||||||
|
import org.aopalliance.aop.Advice;
|
||||||
|
import org.apache.commons.logging.Log;
|
||||||
|
import org.apache.commons.logging.LogFactory;
|
||||||
|
import org.springframework.aop.AfterReturningAdvice;
|
||||||
|
import org.springframework.aop.framework.ProxyFactory;
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -8,17 +18,6 @@ import java.util.Set;
|
|||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.aopalliance.aop.Advice;
|
|
||||||
import org.apache.commons.logging.Log;
|
|
||||||
import org.apache.commons.logging.LogFactory;
|
|
||||||
import org.springframework.aop.AfterReturningAdvice;
|
|
||||||
import org.springframework.aop.framework.ProxyFactory;
|
|
||||||
|
|
||||||
import com.netflix.client.config.IClientConfig;
|
|
||||||
import com.netflix.loadbalancer.ILoadBalancer;
|
|
||||||
import com.netflix.loadbalancer.Server;
|
|
||||||
import com.netflix.loadbalancer.ServerList;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author pbting
|
* @author pbting
|
||||||
*/
|
*/
|
||||||
@ -49,17 +48,21 @@ final class MigrateProxyManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static Object newLoadBalancerProxy(Object bean, ClassLoader classLoader,
|
static Object newLoadBalancerProxy(Object bean, ClassLoader classLoader,
|
||||||
IClientConfig clientConfig) {
|
final IClientConfig clientConfig) {
|
||||||
|
|
||||||
bean = springProxyFactory(bean, classLoader,
|
bean = springProxyFactory(bean, classLoader,
|
||||||
Arrays.asList(new AfterReturningAdvice() {
|
Arrays.asList(new AfterReturningAdvice() {
|
||||||
|
private final IClientConfig iclientConfig = clientConfig;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterReturning(Object returnValue, Method method,
|
public void afterReturning(Object returnValue, Method method,
|
||||||
Object[] args, Object target) {
|
Object[] args, Object target) {
|
||||||
String methodName = method.getName();
|
String methodName = method.getName();
|
||||||
if ("chooseServer".equals(methodName)) {
|
if ("chooseServer".equals(methodName)) {
|
||||||
String serviceId = clientConfig.getClientName();
|
String serviceId = iclientConfig.getClientName();
|
||||||
Server server = (Server) returnValue;
|
Server server = (Server) returnValue;
|
||||||
|
server = ServerListInvocationHandler
|
||||||
|
.checkAndGetServiceServer(serviceId, server);
|
||||||
ServerListInvocationHandler.incrementCallService(serviceId,
|
ServerListInvocationHandler.incrementCallService(serviceId,
|
||||||
server);
|
server);
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,17 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
package org.springframework.cloud.alicloud.ans.migrate;
|
||||||
|
|
||||||
import com.netflix.loadbalancer.ILoadBalancer;
|
import java.util.concurrent.Executors;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import javax.annotation.PostConstruct;
|
||||||
|
|
||||||
import org.springframework.cloud.context.named.NamedContextFactory;
|
import org.springframework.cloud.context.named.NamedContextFactory;
|
||||||
import org.springframework.cloud.endpoint.event.RefreshEvent;
|
import org.springframework.cloud.endpoint.event.RefreshEvent;
|
||||||
import org.springframework.context.ApplicationListener;
|
import org.springframework.context.ApplicationListener;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import com.netflix.loadbalancer.ILoadBalancer;
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author pbting
|
* @author pbting
|
||||||
@ -22,13 +23,14 @@ public class MigrateRefreshEventListener implements ApplicationListener<RefreshE
|
|||||||
|
|
||||||
private volatile String lastScaMigrateAnsSwitchValue = "true";
|
private volatile String lastScaMigrateAnsSwitchValue = "true";
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private Environment environment;
|
private Environment environment;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private NamedContextFactory namedContextFactory;
|
private NamedContextFactory namedContextFactory;
|
||||||
|
|
||||||
public MigrateRefreshEventListener() {
|
public MigrateRefreshEventListener(Environment environment,
|
||||||
|
NamedContextFactory namedContextFactory) {
|
||||||
|
this.environment = environment;
|
||||||
|
this.namedContextFactory = namedContextFactory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostConstruct
|
@PostConstruct
|
||||||
|
@ -1,13 +1,16 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
package org.springframework.cloud.alicloud.ans.migrate;
|
||||||
|
|
||||||
|
import org.springframework.beans.factory.annotation.Qualifier;
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
|
||||||
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
import org.springframework.boot.context.properties.EnableConfigurationProperties;
|
||||||
import org.springframework.cloud.alicloud.ans.ConditionalOnAnsEnabled;
|
import org.springframework.cloud.alicloud.ans.ConditionalOnAnsEnabled;
|
||||||
import org.springframework.cloud.alicloud.context.ans.AnsProperties;
|
import org.springframework.cloud.alicloud.context.ans.AnsProperties;
|
||||||
|
import org.springframework.cloud.context.named.NamedContextFactory;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Conditional;
|
import org.springframework.context.annotation.Conditional;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
import org.springframework.core.env.Environment;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
@EnableConfigurationProperties
|
@EnableConfigurationProperties
|
||||||
@ -22,4 +25,12 @@ public class MigrationAutoconfiguration {
|
|||||||
|
|
||||||
return new MigrateServiceRegistry(ansProperties, applicationContext);
|
return new MigrateServiceRegistry(ansProperties, applicationContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public MigrateRefreshEventListener migrateRefreshEventListener(
|
||||||
|
Environment environment,
|
||||||
|
@Qualifier(value = "springClientFactory") NamedContextFactory namedContextFactory) {
|
||||||
|
|
||||||
|
return new MigrateRefreshEventListener(environment, namedContextFactory);
|
||||||
|
}
|
||||||
}
|
}
|
@ -23,7 +23,10 @@ class ServerListInvocationHandler implements MethodInterceptor {
|
|||||||
|
|
||||||
private final static Log log = LogFactory.getLog(ServerListInvocationHandler.class);
|
private final static Log log = LogFactory.getLog(ServerListInvocationHandler.class);
|
||||||
|
|
||||||
|
private final static ConcurrentMap<String, AnsServerList> SERVER_LIST_CONCURRENT_MAP = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private final static ConcurrentMap<String, ConcurrentMap<String, ServerWrapper>> CALL_SERVICE_COUNT = new ConcurrentHashMap<>();
|
private final static ConcurrentMap<String, ConcurrentMap<String, ServerWrapper>> CALL_SERVICE_COUNT = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
private final static Set<String> INTERCEPTOR_METHOD_NAME = new ConcurrentSkipListSet();
|
private final static Set<String> INTERCEPTOR_METHOD_NAME = new ConcurrentSkipListSet();
|
||||||
|
|
||||||
private IClientConfig clientConfig;
|
private IClientConfig clientConfig;
|
||||||
@ -38,6 +41,7 @@ class ServerListInvocationHandler implements MethodInterceptor {
|
|||||||
ServerListInvocationHandler(IClientConfig clientConfig) {
|
ServerListInvocationHandler(IClientConfig clientConfig) {
|
||||||
this.clientConfig = clientConfig;
|
this.clientConfig = clientConfig;
|
||||||
this.ansServerList = new AnsServerList(clientConfig.getClientName());
|
this.ansServerList = new AnsServerList(clientConfig.getClientName());
|
||||||
|
SERVER_LIST_CONCURRENT_MAP.put(ansServerList.getDom(), ansServerList);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -122,6 +126,23 @@ class ServerListInvocationHandler implements MethodInterceptor {
|
|||||||
return Collections.unmodifiableMap(CALL_SERVICE_COUNT);
|
return Collections.unmodifiableMap(CALL_SERVICE_COUNT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static Server checkAndGetServiceServer(String serviceId, Server server) {
|
||||||
|
if (server != null) {
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.warn(String.format("[%s] refers the server is null", server));
|
||||||
|
|
||||||
|
List<AnsServer> ansServerList = SERVER_LIST_CONCURRENT_MAP.get(serviceId)
|
||||||
|
.getInitialListOfServers();
|
||||||
|
|
||||||
|
if (!ansServerList.isEmpty()) {
|
||||||
|
return ansServerList.get(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return server;
|
||||||
|
}
|
||||||
|
|
||||||
static void incrementCallService(String serviceId, Server server) {
|
static void incrementCallService(String serviceId, Server server) {
|
||||||
ConcurrentMap<String, ServerWrapper> concurrentHashMap = CALL_SERVICE_COUNT
|
ConcurrentMap<String, ServerWrapper> concurrentHashMap = CALL_SERVICE_COUNT
|
||||||
.putIfAbsent(serviceId, new ConcurrentHashMap<>());
|
.putIfAbsent(serviceId, new ConcurrentHashMap<>());
|
||||||
|
@ -6,5 +6,3 @@ org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
|
|||||||
org.springframework.cloud.alicloud.ans.migrate.MigrationAutoconfiguration
|
org.springframework.cloud.alicloud.ans.migrate.MigrationAutoconfiguration
|
||||||
org.springframework.cloud.client.discovery.EnableDiscoveryClient=\
|
org.springframework.cloud.client.discovery.EnableDiscoveryClient=\
|
||||||
org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration
|
org.springframework.cloud.alicloud.ans.AnsDiscoveryClientAutoConfiguration
|
||||||
org.springframework.context.ApplicationListener=\
|
|
||||||
org.springframework.cloud.alicloud.ans.migrate.MigrateRefreshEventListener
|
|
Loading…
x
Reference in New Issue
Block a user