Commit 2f8e70e3 by Nepxion

增加新的策略

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