Commit 2f8e70e3 by Nepxion

增加新的策略

parent d91e7166
......@@ -9,31 +9,32 @@ package com.nepxion.discovery.plugin.admincenter.configuration;
* @version 1.0
*/
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.nepxion.discovery.plugin.admincenter.endpoint.AdminEndpoint;
@Configuration
//@ConditionalOnProperty(value = "com.bkjk.platform.restclient.enabled", matchIfMissing = true)
// @ConditionalOnProperty(value = "spring.application.discovery.admin.enabled", matchIfMissing = true)
public class AdminAutoConfiguration {
//
// @ConditionalOnBean(ServiceRegistry.class)
// @ConditionalOnClass(Endpoint.class)
// protected static class EurekaMgmtEndpointConfiguration {
// @Autowired(required = false)
// private Registration registration;
//
// @Bean
// public EurekaMgmtEndpoint serviceDiscoveryMgmtEndpoint(ServiceRegistry serviceRegistry) {
// EurekaMgmtEndpoint endpoint = new EurekaMgmtEndpoint(serviceRegistry);
// endpoint.setRegistration(registration);
// return endpoint;
// }
// }
@Bean
public AdminEndpoint actuatorEndpoint() {
return new AdminEndpoint();
@ConditionalOnBean(ServiceRegistry.class)
@ConditionalOnClass(Endpoint.class)
protected static class AdminEndpointConfiguration {
@Autowired(required = false)
private Registration registration;
@Bean
public AdminEndpoint adminEndpoint(ServiceRegistry<?> serviceRegistry) {
AdminEndpoint adminEndpoint = new AdminEndpoint(serviceRegistry);
adminEndpoint.setRegistration(registration);
return adminEndpoint;
}
}
}
\ No newline at end of file
......@@ -9,10 +9,14 @@ package com.nepxion.discovery.plugin.admincenter.endpoint;
* @version 1.0
*/
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.actuate.endpoint.Endpoint;
import org.springframework.boot.actuate.endpoint.mvc.MvcEndpoint;
import org.springframework.cloud.client.serviceregistry.Registration;
import org.springframework.cloud.client.serviceregistry.ServiceRegistry;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
......@@ -26,18 +30,31 @@ import org.springframework.web.bind.annotation.RequestParam;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
@ManagedResource(description = "Discovery endpoint")
@ManagedResource(description = "Admin endpoint")
public class AdminEndpoint implements MvcEndpoint, ApplicationContextAware, EnvironmentAware {
private static final Logger LOG = LoggerFactory.getLogger(AdminEndpoint.class);
private ConfigurableApplicationContext context;
private Environment environment;
private ServiceRegistry<?> serviceRegistry;
private Registration registration;
@Autowired
private PluginCache pluginCache;
public AdminEndpoint(ServiceRegistry<?> serviceRegistry) {
this.serviceRegistry = serviceRegistry;
}
public void setRegistration(Registration registration) {
this.registration = registration;
}
@RequestMapping(path = "filter", method = RequestMethod.GET)
@ManagedOperation
public Object filter(@RequestParam("serviceId") String serviceId, @RequestParam("ip") String ip) {
pluginCache.put(serviceId, ip);
return "success";
}
......
......@@ -16,8 +16,8 @@ import org.springframework.context.annotation.Configuration;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.strategy.DiscoveryStrategy;
import com.nepxion.discovery.plugin.framework.strategy.RegisterStrategy;
import com.nepxion.discovery.plugin.framework.strategy.DiscoveryControlStrategy;
import com.nepxion.discovery.plugin.framework.strategy.RegisterControlStrategy;
@Configuration
public class PluginAutoConfiguration {
......@@ -37,12 +37,12 @@ public class PluginAutoConfiguration {
}
@Bean
public RegisterStrategy registerStrategy() {
return new RegisterStrategy();
public RegisterControlStrategy registerControlStrategy() {
return new RegisterControlStrategy();
}
@Bean
public DiscoveryStrategy discoveryStrategy() {
return new DiscoveryStrategy();
public DiscoveryControlStrategy discoveryControlStrategy() {
return new DiscoveryControlStrategy();
}
}
\ No newline at end of file
......@@ -10,7 +10,8 @@ package com.nepxion.discovery.plugin.framework.constant;
*/
public class PluginConstant {
public static final String SPRING_APPLICATION_DISCOVERY_VERSION_ENABLED = "spring.application.discovery.version.enabled";
public static final String SPRING_APPLICATION_REGISTER_CONTROL_ENABLED = "spring.application.register.control.enabled";
public static final String SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED = "spring.application.discovery.control.enabled";
public static final String SPRING_APPLICATION_NAME = "spring.application.name";
public static final String EUREKA_METADATA_VERSION = "eureka.instance.metadataMap.version";
......
......@@ -17,7 +17,7 @@ import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.strategy.DiscoveryStrategy;
import com.nepxion.discovery.plugin.framework.strategy.DiscoveryControlStrategy;
public class DiscoveryClientDecorator implements DiscoveryClient {
private DiscoveryClient discoveryClient;
......@@ -45,13 +45,13 @@ public class DiscoveryClientDecorator implements DiscoveryClient {
public List<ServiceInstance> getInstances(String serviceId) {
List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);
boolean discoveryVersionEnabled = Boolean.valueOf(environment.getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_VERSION_ENABLED));
if (discoveryVersionEnabled) {
Boolean discoveryControlEnabled = environment.getProperty(PluginConstant.SPRING_APPLICATION_DISCOVERY_CONTROL_ENABLED, Boolean.class);
if (discoveryControlEnabled) {
String applicationName = environment.getProperty(PluginConstant.SPRING_APPLICATION_NAME);
String metadataVersion = environment.getProperty(PluginConstant.EUREKA_METADATA_VERSION);
DiscoveryStrategy discoveryStrategy = applicationContext.getBean(DiscoveryStrategy.class);
discoveryStrategy.apply(applicationName, metadataVersion, serviceId, instances);
DiscoveryControlStrategy discoveryControlStrategy = applicationContext.getBean(DiscoveryControlStrategy.class);
discoveryControlStrategy.apply(applicationName, metadataVersion, serviceId, instances);
}
return instances;
......
......@@ -15,7 +15,8 @@ import org.springframework.cloud.netflix.eureka.serviceregistry.EurekaServiceReg
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.ConfigurableEnvironment;
import com.nepxion.discovery.plugin.framework.strategy.RegisterStrategy;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.strategy.RegisterControlStrategy;
public class EurekaServiceRegistryDecorator extends EurekaServiceRegistry {
private ServiceRegistry<EurekaRegistration> serviceRegistry;
......@@ -30,11 +31,14 @@ public class EurekaServiceRegistryDecorator extends EurekaServiceRegistry {
@Override
public void register(EurekaRegistration registration) {
String serviceId = registration.getServiceId();
String ipAddress = registration.getInstanceConfig().getIpAddress();
Boolean registerControlEnabled = environment.getProperty(PluginConstant.SPRING_APPLICATION_REGISTER_CONTROL_ENABLED, Boolean.class);
if (registerControlEnabled) {
String serviceId = registration.getServiceId();
String ipAddress = registration.getInstanceConfig().getIpAddress();
RegisterStrategy registerStrategy = applicationContext.getBean(RegisterStrategy.class);
registerStrategy.apply(serviceId, ipAddress);
RegisterControlStrategy registerControlStrategy = applicationContext.getBean(RegisterControlStrategy.class);
registerControlStrategy.apply(serviceId, ipAddress);
}
serviceRegistry.register(registration);
}
......
......@@ -28,7 +28,7 @@ import com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity;
import com.nepxion.discovery.plugin.framework.entity.DiscoveryServiceEntity;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
public class DiscoveryStrategy {
public class DiscoveryControlStrategy {
@Autowired
private RuleEntity pluginEntity;
......
......@@ -23,8 +23,8 @@ import com.nepxion.discovery.plugin.framework.entity.RegisterEntity;
import com.nepxion.discovery.plugin.framework.entity.RegisterFilterType;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
public class RegisterStrategy {
private static final Logger LOG = LoggerFactory.getLogger(RegisterStrategy.class);
public class RegisterControlStrategy {
private static final Logger LOG = LoggerFactory.getLogger(RegisterControlStrategy.class);
@Autowired
private RuleEntity ruleEntity;
......
......@@ -5,9 +5,14 @@ eureka.client.serviceUrl.defaultZone=http://10.0.75.1:9528/eureka/
eureka.instance.preferIpAddress=true
eureka.instance.metadataMap.version=1.0
# Gray version control
spring.application.discovery.version.enabled=true
# Get remote or config
# Plugin config
# 开启和关闭服务注册层面的控制。一旦关闭,服务注册的黑/白名单过滤功能将失效
spring.application.register.control.enabled=true
# 开启和关闭服务发现层面的控制。一旦关闭,服务多版本调用的控制功能将失效,动态屏蔽指定IP地址的服务示例功能将失效
spring.application.discovery.control.enabled=true
# 开启和关闭远程配置中心规则配置文件读取。一旦关闭,默认读取本地规则配置文件(例如:rule.xml)
spring.application.discovery.remote.config.enabled=true
management.security.enabled=false
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment