Commit 4fa83117 by Nepxion

增加动态版本设置

parent 47801347
......@@ -15,6 +15,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.nepxion.discovery.plugin.admincenter.endpoint.ConfigEndpoint;
import com.nepxion.discovery.plugin.admincenter.endpoint.VersionEndpoint;
@Configuration
public class AdminAutoConfiguration {
......@@ -24,5 +25,10 @@ public class AdminAutoConfiguration {
public ConfigEndpoint configEndpoint() {
return new ConfigEndpoint();
}
@Bean
public VersionEndpoint versionEndpoint() {
return new VersionEndpoint();
}
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.admincenter.endpoint;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang3.StringUtils;
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.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.jmx.export.annotation.ManagedOperation;
import org.springframework.jmx.export.annotation.ManagedResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import com.nepxion.discovery.plugin.framework.adapter.PluginAdapter;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
@ManagedResource(description = "Version Endpoint")
public class VersionEndpoint implements MvcEndpoint {
@Autowired
private PluginContextAware pluginContextAware;
@Autowired
private PluginAdapter pluginAdapter;
// 发送当前服务的动态版本
@RequestMapping(path = "send", method = RequestMethod.POST)
@ResponseBody
@ManagedOperation
public ResponseEntity<?> send(@RequestBody String version) {
Boolean discoveryControlEnabled = pluginContextAware.isDiscoveryControlEnabled();
if (!discoveryControlEnabled) {
return new ResponseEntity<>(Collections.singletonMap("Message", "Discovery control is disabled"), HttpStatus.NOT_FOUND);
}
pluginAdapter.setDynamicVersion(version);
return ResponseEntity.ok().body("OK");
}
// 查看当前服务的动态版本和动态版本
@RequestMapping(path = "view", method = RequestMethod.GET)
@ResponseBody
@ManagedOperation
public ResponseEntity<List<String>> view() {
List<String> versionList = new ArrayList<String>(2);
String localVersion = pluginAdapter.getLocalVersion();
String dynamicVersion = pluginAdapter.getDynamicVersion();
versionList.add(StringUtils.isNotEmpty(localVersion) ? localVersion : StringUtils.EMPTY);
versionList.add(StringUtils.isNotEmpty(dynamicVersion) ? dynamicVersion : StringUtils.EMPTY);
return ResponseEntity.ok().body(versionList);
}
@Override
public String getPath() {
return "/version";
}
@Override
public boolean isSensitive() {
return true;
}
@Override
public Class<? extends Endpoint<?>> getEndpointType() {
return null;
}
}
\ No newline at end of file
......@@ -22,7 +22,7 @@ import com.nepxion.discovery.plugin.framework.constant.ConsulConstant;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
public class ConsulAdapter implements PluginAdapter {
public class ConsulAdapter extends AbstractPluginAdapter {
@Autowired
private ConfigurableEnvironment environment;
......@@ -76,7 +76,7 @@ public class ConsulAdapter implements PluginAdapter {
}
@Override
public String getVersion() {
public String getLocalVersion() {
return version;
}
}
\ No newline at end of file
......@@ -17,7 +17,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import com.nepxion.discovery.plugin.framework.constant.EurekaConstant;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
public class EurekaAdapter implements PluginAdapter {
public class EurekaAdapter extends AbstractPluginAdapter {
@Autowired
private ConfigurableEnvironment environment;
......@@ -44,7 +44,7 @@ public class EurekaAdapter implements PluginAdapter {
}
@Override
public String getVersion() {
public String getLocalVersion() {
return environment.getProperty(EurekaConstant.METADATA_VERSION);
}
}
\ No newline at end of file
......@@ -17,7 +17,7 @@ import org.springframework.core.env.ConfigurableEnvironment;
import com.nepxion.discovery.plugin.framework.constant.ZookeeperConstant;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
public class ZookeeperAdapter implements PluginAdapter {
public class ZookeeperAdapter extends AbstractPluginAdapter {
@Autowired
private ConfigurableEnvironment environment;
......@@ -44,7 +44,7 @@ public class ZookeeperAdapter implements PluginAdapter {
}
@Override
public String getVersion() {
public String getLocalVersion() {
return environment.getProperty(ZookeeperConstant.METADATA_VERSION);
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.framework.adapter;
/**
* <p>Title: Nepxion Discovery</p>
* <p>Description: Nepxion Discovery</p>
* <p>Copyright: Copyright (c) 2017-2050</p>
* <p>Company: Nepxion</p>
* @author Haojun Ren
* @version 1.0
*/
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
public abstract class AbstractPluginAdapter implements PluginAdapter {
@Autowired
private PluginCache pluginCache;
@Override
public String getVersion() {
String dynamicVersion = getDynamicVersion();
if (StringUtils.isNotEmpty(dynamicVersion)) {
return dynamicVersion;
}
return getLocalVersion();
}
@Override
public String getDynamicVersion() {
return pluginCache.get(PluginConstant.VERSION);
}
@Override
public void setDynamicVersion(String version) {
pluginCache.put(PluginConstant.VERSION, version);
}
}
\ No newline at end of file
......@@ -17,4 +17,10 @@ public interface PluginAdapter {
int getPort(Registration registration);
String getVersion();
String getLocalVersion();
String getDynamicVersion();
void setDynamicVersion(String version);
}
\ No newline at end of file
......@@ -24,7 +24,7 @@ public class PluginCache {
public PluginCache() {
loadingCache = CacheBuilder.newBuilder()
.concurrencyLevel(8)
.expireAfterWrite(1, TimeUnit.DAYS)
.expireAfterWrite(365 * 100, TimeUnit.DAYS)
.initialCapacity(10)
.maximumSize(100)
.recordStats()
......
......@@ -14,6 +14,7 @@ import java.util.concurrent.locks.ReentrantReadWriteLock;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.nepxion.discovery.plugin.framework.cache.PluginCache;
import com.nepxion.discovery.plugin.framework.context.PluginContainerInitializedHandler;
import com.nepxion.discovery.plugin.framework.context.PluginContextAware;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
......@@ -57,6 +58,11 @@ public class PluginAutoConfiguration {
}
@Bean
public PluginCache pluginCache() {
return new PluginCache();
}
@Bean
public RuleEntity ruleEntity() {
return new RuleEntity();
}
......
......@@ -53,8 +53,10 @@
<!-- 1. 消费端的application.properties未定义版本号,则该消费端可以访问提供端任何版本 -->
<!-- 2. 提供端的application.properties未定义版本号,当消费端在xml里不做任何版本配置,才可以访问该提供端 -->
<version>
<!-- 表示消费端服务a的1.0,允许访问提供端服务b的1.0和1.1版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0" provider-version-value="1.0;1.1"/>
<!-- 表示消费端服务a的1.0,允许访问提供端服务b的1.0版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0" provider-version-value="1.0"/>
<!-- 表示消费端服务a的1.1,允许访问提供端服务b的1.1版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.1" provider-version-value="1.1"/>
<!-- 表示消费端服务b的1.0,允许访问提供端服务c的1.0和1.1版本 -->
<service consumer-service-name="discovery-springcloud-example-b" provider-service-name="discovery-springcloud-example-c" consumer-version-value="1.0" provider-version-value="1.0;1.1"/>
<!-- 表示消费端服务b的1.1,允许访问提供端服务c的1.2版本 -->
......
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