add test case of ANS
parent
dbfc363c02
commit
11db5e8728
@ -1,31 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
|
||||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation;
|
|
||||||
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.concurrent.ConcurrentMap;
|
|
||||||
|
|
||||||
@Endpoint(id = "migrate")
|
|
||||||
public class MigrateEndpoint {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(MigrateEndpoint.class);
|
|
||||||
|
|
||||||
public MigrateEndpoint() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return ans endpoint
|
|
||||||
*/
|
|
||||||
@ReadOperation
|
|
||||||
public Map<String, ConcurrentMap<String, ServerWrapper>> invoke() {
|
|
||||||
|
|
||||||
Map<String, ConcurrentMap<String, ServerWrapper>> result = ServerListInvocationHandler
|
|
||||||
.getServerRegistry();
|
|
||||||
|
|
||||||
log.info("migrate server list :" + result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
|
|
||||||
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
@ConditionalOnWebApplication
|
|
||||||
@ConditionalOnClass(value = Endpoint.class)
|
|
||||||
@Conditional(MigrateOnConditionClass.class)
|
|
||||||
public class MigrateEndpointAutoConfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MigrateEndpoint ansEndpoint() {
|
|
||||||
return new MigrateEndpoint();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,48 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.springframework.beans.factory.BeanClassLoaderAware;
|
|
||||||
import org.springframework.context.annotation.Condition;
|
|
||||||
import org.springframework.context.annotation.ConditionContext;
|
|
||||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
|
||||||
import org.springframework.util.ClassUtils;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
public abstract class MigrateOnCondition implements Condition, BeanClassLoaderAware {
|
|
||||||
|
|
||||||
final String[] conditionOnClass = new String[] {
|
|
||||||
"org.springframework.cloud.consul.serviceregistry.ConsulAutoServiceRegistration",
|
|
||||||
"org.springframework.cloud.netflix.eureka.serviceregistry.EurekaAutoServiceRegistration" };
|
|
||||||
|
|
||||||
ClassLoader classLoader;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBeanClassLoader(ClassLoader classLoader) {
|
|
||||||
this.classLoader = classLoader;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public abstract boolean matches(ConditionContext context,
|
|
||||||
AnnotatedTypeMetadata metadata);
|
|
||||||
|
|
||||||
boolean isPresent(String className, ClassLoader classLoader) {
|
|
||||||
if (classLoader == null) {
|
|
||||||
classLoader = ClassUtils.getDefaultClassLoader();
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
forName(className, classLoader);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (Throwable throwable) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Class<?> forName(String className, ClassLoader classLoader)
|
|
||||||
throws ClassNotFoundException {
|
|
||||||
return classLoader != null ? classLoader.loadClass(className)
|
|
||||||
: Class.forName(className);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,23 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.context.annotation.ConditionContext;
|
|
||||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
public class MigrateOnConditionClass extends MigrateOnCondition {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory
|
|
||||||
.getLogger(MigrateOnConditionClass.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
|
||||||
boolean result = isPresent(conditionOnClass[0], classLoader)
|
|
||||||
|| isPresent(conditionOnClass[1], classLoader);
|
|
||||||
log.info("the result of matcher is " + result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,22 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.context.annotation.ConditionContext;
|
|
||||||
import org.springframework.core.type.AnnotatedTypeMetadata;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
public class MigrateOnConditionMissingClass extends MigrateOnConditionClass {
|
|
||||||
private static final Logger log = LoggerFactory
|
|
||||||
.getLogger(MigrateOnConditionMissingClass.class);
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
|
|
||||||
boolean result = !super.matches(context, metadata);
|
|
||||||
log.info(" the result of matcher is " + result);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,97 +0,0 @@
|
|||||||
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.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.aop.AfterReturningAdvice;
|
|
||||||
import org.springframework.aop.framework.ProxyFactory;
|
|
||||||
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
final class MigrateProxyManager {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(MigrateProxyManager.class);
|
|
||||||
private final static AtomicBoolean IS_PROXY = new AtomicBoolean(true);
|
|
||||||
|
|
||||||
private final static Set<String> SERVICES_ID = new ConcurrentSkipListSet<>();
|
|
||||||
|
|
||||||
private static Object springProxyFactory(Object target, ClassLoader classLoader,
|
|
||||||
List<Advice> adviceList, Class... interfaces) {
|
|
||||||
final ProxyFactory proxyFactory = new ProxyFactory(interfaces);
|
|
||||||
proxyFactory.setTarget(target);
|
|
||||||
adviceList.forEach(advice -> proxyFactory.addAdvice(advice));
|
|
||||||
return proxyFactory.getProxy(classLoader);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Object newServerListProxy(Object bean, ClassLoader classLoader,
|
|
||||||
IClientConfig clientConfig) {
|
|
||||||
bean = springProxyFactory(bean, classLoader,
|
|
||||||
Arrays.asList(new ServerListInvocationHandler(clientConfig)),
|
|
||||||
new Class[] { ServerList.class });
|
|
||||||
log.info("[service id]" + clientConfig.getClientName()
|
|
||||||
+ " new a ServerList proxy instance for spring cloud netflix to spring cloud alibaba ");
|
|
||||||
collectServiceId(clientConfig.getClientName());
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Object newLoadBalancerProxy(Object bean, ClassLoader classLoader,
|
|
||||||
final IClientConfig clientConfig) {
|
|
||||||
|
|
||||||
bean = springProxyFactory(bean, classLoader,
|
|
||||||
Arrays.asList(new AfterReturningAdvice() {
|
|
||||||
private final IClientConfig iclientConfig = clientConfig;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void afterReturning(Object returnValue, Method method,
|
|
||||||
Object[] args, Object target) {
|
|
||||||
String methodName = method.getName();
|
|
||||||
if ("chooseServer".equals(methodName)) {
|
|
||||||
String serviceId = iclientConfig.getClientName();
|
|
||||||
Server server = (Server) returnValue;
|
|
||||||
server = ServerListInvocationHandler
|
|
||||||
.checkAndGetServiceServer(serviceId, server);
|
|
||||||
ServerListInvocationHandler.incrementCallService(serviceId,
|
|
||||||
server);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}), new Class[] { ILoadBalancer.class });
|
|
||||||
log.info("[service id]" + clientConfig.getClientName()
|
|
||||||
+ " new a ILoadBalancer proxy instance for spring cloud netflix to spring cloud alibaba ");
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void migrateProxyClose() {
|
|
||||||
IS_PROXY.set(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void migrateProxyUp() {
|
|
||||||
IS_PROXY.set(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static boolean isMigrateProxy() {
|
|
||||||
|
|
||||||
return IS_PROXY.get();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void collectServiceId(String serviceId) {
|
|
||||||
SERVICES_ID.add(serviceId);
|
|
||||||
}
|
|
||||||
|
|
||||||
static Set<String> getServicesId() {
|
|
||||||
|
|
||||||
return Collections.unmodifiableSet(SERVICES_ID);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,78 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import com.netflix.loadbalancer.ILoadBalancer;
|
|
||||||
import org.springframework.cloud.context.named.NamedContextFactory;
|
|
||||||
import org.springframework.cloud.endpoint.event.RefreshEvent;
|
|
||||||
import org.springframework.context.ApplicationListener;
|
|
||||||
import org.springframework.core.env.Environment;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
|
||||||
import java.util.concurrent.Executors;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class MigrateRefreshEventListener implements ApplicationListener<RefreshEvent> {
|
|
||||||
|
|
||||||
private final static int CHECK_INTERVAL = 1;
|
|
||||||
|
|
||||||
private final static String MIGRATE_SWITCH = "spring.cloud.alicloud.migrate.ans.switch";
|
|
||||||
|
|
||||||
private volatile String lastScaMigrateAnsSwitchValue = "true";
|
|
||||||
|
|
||||||
private Environment environment;
|
|
||||||
|
|
||||||
private NamedContextFactory namedContextFactory;
|
|
||||||
|
|
||||||
public MigrateRefreshEventListener(Environment environment,
|
|
||||||
NamedContextFactory namedContextFactory) {
|
|
||||||
this.environment = environment;
|
|
||||||
this.namedContextFactory = namedContextFactory;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PostConstruct
|
|
||||||
public void initTimerCheck() {
|
|
||||||
Executors.newSingleThreadScheduledExecutor().scheduleWithFixedDelay(
|
|
||||||
() -> onApplicationEvent(null), CHECK_INTERVAL, CHECK_INTERVAL,
|
|
||||||
TimeUnit.SECONDS);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onApplicationEvent(RefreshEvent event) {
|
|
||||||
String value = environment.getProperty(MIGRATE_SWITCH, "true");
|
|
||||||
// check 1: check the value
|
|
||||||
if (value.equals(lastScaMigrateAnsSwitchValue)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
updateLastScaMigrateAnsResetValue(value);
|
|
||||||
|
|
||||||
// step 1: migrate up
|
|
||||||
if ("true".equals(value)) {
|
|
||||||
MigrateProxyManager.migrateProxyUp();
|
|
||||||
serviceIdContextInit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// step 2: migrate close
|
|
||||||
if ("false".equals(value)) {
|
|
||||||
MigrateProxyManager.migrateProxyClose();
|
|
||||||
serviceIdContextInit();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void serviceIdContextInit() {
|
|
||||||
namedContextFactory.destroy();
|
|
||||||
// initializer each spring context for service id
|
|
||||||
MigrateProxyManager.getServicesId().forEach(serviceId -> namedContextFactory
|
|
||||||
.getInstance(serviceId, ILoadBalancer.class));
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized void updateLastScaMigrateAnsResetValue(String value) {
|
|
||||||
this.lastScaMigrateAnsSwitchValue = value;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import com.netflix.client.config.IClientConfig;
|
|
||||||
import com.netflix.loadbalancer.ILoadBalancer;
|
|
||||||
import com.netflix.loadbalancer.ServerList;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.beans.BeansException;
|
|
||||||
import org.springframework.beans.factory.BeanClassLoaderAware;
|
|
||||||
import org.springframework.beans.factory.config.BeanPostProcessor;
|
|
||||||
|
|
||||||
public class MigrateRibbonBeanPostProcessor
|
|
||||||
implements BeanPostProcessor, BeanClassLoaderAware {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory.getLogger(MigrateOnCondition.class);
|
|
||||||
|
|
||||||
private ClassLoader classLoader;
|
|
||||||
private IClientConfig clientConfig;
|
|
||||||
|
|
||||||
public MigrateRibbonBeanPostProcessor(IClientConfig clientConfig) {
|
|
||||||
this.clientConfig = clientConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Object postProcessAfterInitialization(Object bean, String beanName)
|
|
||||||
throws BeansException {
|
|
||||||
|
|
||||||
// step 1 : check the bean whether proxy or not
|
|
||||||
if (!MigrateProxyManager.isMigrateProxy()) {
|
|
||||||
log.info("Migrate proxy is Close.");
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
// step 2 : proxy the designated bean
|
|
||||||
if (bean instanceof ServerList) {
|
|
||||||
bean = MigrateProxyManager.newServerListProxy(bean, classLoader,
|
|
||||||
clientConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bean instanceof ILoadBalancer) {
|
|
||||||
bean = MigrateProxyManager.newLoadBalancerProxy(bean, classLoader,
|
|
||||||
clientConfig);
|
|
||||||
}
|
|
||||||
return bean;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void setBeanClassLoader(ClassLoader classLoader) {
|
|
||||||
this.classLoader = classLoader;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
import org.springframework.boot.web.context.WebServerInitializedEvent;
|
|
||||||
import org.springframework.cloud.alicloud.ans.registry.AnsRegistration;
|
|
||||||
import org.springframework.cloud.alicloud.ans.registry.AnsServiceRegistry;
|
|
||||||
import org.springframework.cloud.alicloud.context.ans.AnsProperties;
|
|
||||||
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
import org.springframework.context.event.EventListener;
|
|
||||||
import org.springframework.stereotype.Component;
|
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
@Component
|
|
||||||
public class MigrateServiceRegistry {
|
|
||||||
|
|
||||||
private static final Logger log = LoggerFactory
|
|
||||||
.getLogger(MigrateServiceRegistry.class);
|
|
||||||
|
|
||||||
private AtomicBoolean running = new AtomicBoolean(false);
|
|
||||||
|
|
||||||
private ServiceRegistry serviceRegistry;
|
|
||||||
private AnsRegistration ansRegistration;
|
|
||||||
|
|
||||||
public MigrateServiceRegistry(AnsProperties ansProperties,
|
|
||||||
ApplicationContext context) {
|
|
||||||
this.ansRegistration = new AnsRegistration(ansProperties, context);
|
|
||||||
this.ansRegistration.init();
|
|
||||||
this.serviceRegistry = new AnsServiceRegistry();
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventListener(WebServerInitializedEvent.class)
|
|
||||||
public void onApplicationEvent(WebServerInitializedEvent event) {
|
|
||||||
int serverPort = event.getWebServer().getPort();
|
|
||||||
this.ansRegistration.setPort(serverPort);
|
|
||||||
log.info("[ Migrate ] change the port to " + serverPort);
|
|
||||||
if (!this.running.get()) {
|
|
||||||
long s = System.currentTimeMillis();
|
|
||||||
log.info("[Migrate] start to registry server to ANS");
|
|
||||||
this.serviceRegistry.register(this.ansRegistration);
|
|
||||||
log.info("[migrate] end to registry server to ANS cost time with "
|
|
||||||
+ (System.currentTimeMillis() - s) + " ms.");
|
|
||||||
this.running.set(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,39 +0,0 @@
|
|||||||
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.context.properties.EnableConfigurationProperties;
|
|
||||||
import org.springframework.cloud.alicloud.ans.ConditionalOnAnsEnabled;
|
|
||||||
import org.springframework.cloud.alicloud.context.ans.AnsProperties;
|
|
||||||
import org.springframework.cloud.context.named.NamedContextFactory;
|
|
||||||
import org.springframework.context.ApplicationContext;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.core.env.Environment;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
@EnableConfigurationProperties
|
|
||||||
@Conditional(MigrateOnConditionClass.class)
|
|
||||||
@ConditionalOnProperty(value = "spring.cloud.service-registry.auto-registration.enabled", matchIfMissing = true)
|
|
||||||
@ConditionalOnAnsEnabled
|
|
||||||
public class MigrationAutoconfiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MigrateServiceRegistry migrationManger(AnsProperties ansProperties,
|
|
||||||
ApplicationContext applicationContext) {
|
|
||||||
|
|
||||||
return new MigrateServiceRegistry(ansProperties, applicationContext);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MigrateRefreshEventListener migrateRefreshEventListener(
|
|
||||||
Environment environment,
|
|
||||||
@Qualifier(value = "springClientFactory") NamedContextFactory namedContextFactory) {
|
|
||||||
|
|
||||||
return new MigrateRefreshEventListener(environment, namedContextFactory);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.migrate;
|
|
||||||
|
|
||||||
import com.netflix.loadbalancer.Server;
|
|
||||||
|
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author pbting
|
|
||||||
*/
|
|
||||||
public class ServerWrapper {
|
|
||||||
|
|
||||||
private Server server;
|
|
||||||
private AtomicLong callCount;
|
|
||||||
|
|
||||||
public ServerWrapper() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public ServerWrapper(Server server, AtomicLong callCount) {
|
|
||||||
this.server = server;
|
|
||||||
this.callCount = callCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Server getServer() {
|
|
||||||
return server;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setServer(Server server) {
|
|
||||||
this.server = server;
|
|
||||||
}
|
|
||||||
|
|
||||||
public AtomicLong getCallCount() {
|
|
||||||
return callCount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCallCount(AtomicLong callCount) {
|
|
||||||
this.callCount = callCount;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,19 +0,0 @@
|
|||||||
package org.springframework.cloud.alicloud.ans.ribbon;
|
|
||||||
|
|
||||||
import com.netflix.client.config.IClientConfig;
|
|
||||||
import org.springframework.cloud.alicloud.ans.migrate.MigrateOnConditionClass;
|
|
||||||
import org.springframework.cloud.alicloud.ans.migrate.MigrateRibbonBeanPostProcessor;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Conditional;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
|
|
||||||
@Configuration
|
|
||||||
@Conditional(MigrateOnConditionClass.class)
|
|
||||||
public class MigrateRibbonCofiguration {
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
public MigrateRibbonBeanPostProcessor migrateBeanPostProcessor(IClientConfig clientConfig) {
|
|
||||||
|
|
||||||
return new MigrateRibbonBeanPostProcessor(clientConfig);
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue