Commit 8dbfbc6b by Nepxion

重构规则定义,并升级到2.0版本

parent 629609db
......@@ -28,9 +28,12 @@ import com.nepxion.discovery.plugin.configcenter.xml.Dom4JParser;
import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity;
import com.nepxion.discovery.plugin.framework.entity.DiscoveryServiceEntity;
import com.nepxion.discovery.plugin.framework.entity.FilterEntity;
import com.nepxion.discovery.plugin.framework.entity.FilterHolderEntity;
import com.nepxion.discovery.plugin.framework.entity.FilterType;
import com.nepxion.discovery.plugin.framework.entity.RegisterEntity;
import com.nepxion.discovery.plugin.framework.entity.RegisterFilterType;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.entity.VersionEntity;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
public class ConfigParser extends Dom4JParser {
......@@ -83,27 +86,61 @@ public class ConfigParser extends Dom4JParser {
reentrantReadWriteLock.writeLock().unlock();
}
LOG.info("Rule entity is {}", ruleEntity);
LOG.info("Rule entity=\n{}", ruleEntity);
}
@SuppressWarnings("rawtypes")
private void parseRegister(Element element, RegisterEntity registerEntity) {
Attribute filterTypeAttribute = element.attribute(ConfigConstant.FILTER_TYPE_ATTRIBUTE_NAME);
if (filterTypeAttribute == null) {
throw new PluginException("Attribute[" + ConfigConstant.FILTER_TYPE_ATTRIBUTE_NAME + "] in element[" + element.getName() + "] is missing");
for (Iterator elementIterator = element.elementIterator(); elementIterator.hasNext();) {
Object childElementObject = elementIterator.next();
if (childElementObject instanceof Element) {
Element childElement = (Element) childElementObject;
if (StringUtils.equals(childElement.getName(), ConfigConstant.BLACKLIST_ELEMENT_NAME)) {
parseFilter(childElement, ConfigConstant.BLACKLIST_ELEMENT_NAME, registerEntity);
} else if (StringUtils.equals(childElement.getName(), ConfigConstant.WHITELIST_ELEMENT_NAME)) {
parseFilter(childElement, ConfigConstant.WHITELIST_ELEMENT_NAME, registerEntity);
}
}
}
String filterType = filterTypeAttribute.getData().toString().trim();
registerEntity.setFilterType(RegisterFilterType.fromString(filterType));
}
@SuppressWarnings("rawtypes")
private void parseDiscovery(Element element, DiscoveryEntity discoveryEntity) {
for (Iterator elementIterator = element.elementIterator(); elementIterator.hasNext();) {
Object childElementObject = elementIterator.next();
if (childElementObject instanceof Element) {
Element childElement = (Element) childElementObject;
if (StringUtils.equals(childElement.getName(), ConfigConstant.BLACKLIST_ELEMENT_NAME)) {
parseFilter(childElement, ConfigConstant.BLACKLIST_ELEMENT_NAME, discoveryEntity);
} else if (StringUtils.equals(childElement.getName(), ConfigConstant.WHITELIST_ELEMENT_NAME)) {
parseFilter(childElement, ConfigConstant.WHITELIST_ELEMENT_NAME, discoveryEntity);
} else if (StringUtils.equals(childElement.getName(), ConfigConstant.VERSION_ELEMENT_NAME)) {
parseVersion(childElement, discoveryEntity);
}
}
}
}
@SuppressWarnings("rawtypes")
private void parseFilter(Element element, String filterTypeValue, FilterHolderEntity filterHolderEntity) {
FilterEntity filterEntity = filterHolderEntity.getFilterEntity();
if (filterEntity != null) {
throw new PluginException("Filter[" + filterEntity.getFilterType() + "] has been configed, only one filter element exists");
}
filterEntity = new FilterEntity();
filterEntity.setFilterType(FilterType.fromString(filterTypeValue));
Attribute globalFilterAttribute = element.attribute(ConfigConstant.FILTER_VALUE_ATTRIBUTE_NAME);
if (globalFilterAttribute != null) {
String globalFilterValue = globalFilterAttribute.getData().toString().trim();
List<String> globalFilterValueList = parseList(globalFilterValue);
registerEntity.setFilterValueList(globalFilterValueList);
filterEntity.setFilterValueList(globalFilterValueList);
}
Map<String, List<String>> filterMap = registerEntity.getFilterMap();
Map<String, List<String>> filterMap = filterEntity.getFilterMap();
for (Iterator elementIterator = element.elementIterator(); elementIterator.hasNext();) {
Object childElementObject = elementIterator.next();
if (childElementObject instanceof Element) {
......@@ -124,11 +161,20 @@ public class ConfigParser extends Dom4JParser {
filterMap.put(serviceName, filterValueList);
}
}
filterHolderEntity.setFilterEntity(filterEntity);
}
@SuppressWarnings("rawtypes")
private void parseDiscovery(Element element, DiscoveryEntity discoveryEntity) {
Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = discoveryEntity.getServiceEntityMap();
private void parseVersion(Element element, DiscoveryEntity discoveryEntity) {
VersionEntity versionEntity = discoveryEntity.getVersionEntity();
if (versionEntity != null) {
throw new PluginException("Version has been configed, only one version element exists");
}
versionEntity = new VersionEntity();
Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = versionEntity.getServiceEntityMap();
for (Iterator elementIterator = element.elementIterator(); elementIterator.hasNext();) {
Object childElementObject = elementIterator.next();
if (childElementObject instanceof Element) {
......@@ -173,6 +219,8 @@ public class ConfigParser extends Dom4JParser {
serviceEntityList.add(serviceEntity);
}
}
discoveryEntity.setVersionEntity(versionEntity);
}
private List<String> parseList(String value) {
......
......@@ -14,11 +14,13 @@ public class ConfigConstant {
public static final String RULE_ELEMENT_NAME = "rule";
public static final String REGISTER_ELEMENT_NAME = "register";
public static final String DISCOVERY_ELEMENT_NAME = "discovery";
public static final String SERVICE_ELEMENT_NAME = "service";
public static final String FILTER_TYPE_ATTRIBUTE_NAME = "filter-type";
public static final String BLACKLIST_ELEMENT_NAME = "blacklist";
public static final String WHITELIST_ELEMENT_NAME = "whitelist";
public static final String VERSION_ELEMENT_NAME = "version";
public static final String FILTER_VALUE_ATTRIBUTE_NAME = "filter-value";
public static final String SERVICE_NAME_ATTRIBUTE_NAME = "service-name";
public static final String DISCOVERY_ELEMENT_NAME = "discovery";
public static final String CONSUMER_SERVICE_NAME_ATTRIBUTE_NAME = "consumer-service-name";
public static final String PROVIDER_SERVICE_NAME_ATTRIBUTE_NAME = "provider-service-name";
public static final String CONSUMER_VERSION_VALUE_ATTRIBUTE_NAME = "consumer-version-value";
......
......@@ -9,45 +9,20 @@ package com.nepxion.discovery.plugin.framework.entity;
* @version 1.0
*/
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class DiscoveryEntity extends FilterHolderEntity {
private static final long serialVersionUID = -7417362859952278987L;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class DiscoveryEntity implements Serializable {
private static final long serialVersionUID = 6281838121286637807L;
private Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = new LinkedHashMap<String, List<DiscoveryServiceEntity>>();
private VersionEntity versionEntity;
public DiscoveryEntity() {
}
public Map<String, List<DiscoveryServiceEntity>> getServiceEntityMap() {
return serviceEntityMap;
}
public void setServiceEntityMap(Map<String, List<DiscoveryServiceEntity>> serviceEntityMap) {
this.serviceEntityMap = serviceEntityMap;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
public VersionEntity getVersionEntity() {
return versionEntity;
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
public void setVersionEntity(VersionEntity versionEntity) {
this.versionEntity = versionEntity;
}
}
\ No newline at end of file
......@@ -18,7 +18,7 @@ import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class DiscoveryServiceEntity implements Serializable {
private static final long serialVersionUID = -2976565258172148792L;
private static final long serialVersionUID = 9074414583796627542L;
private String consumerServiceName;
private String providerServiceName;
......
package com.nepxion.discovery.plugin.framework.entity;
/**
* <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.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class FilterEntity implements Serializable {
private static final long serialVersionUID = 3830016495318834467L;
private FilterType filterType;
private List<String> filterValueList;
private Map<String, List<String>> filterMap = new LinkedHashMap<String, List<String>>();
public FilterEntity() {
}
public FilterType getFilterType() {
return filterType;
}
public void setFilterType(FilterType filterType) {
this.filterType = filterType;
}
public List<String> getFilterValueList() {
return filterValueList;
}
public void setFilterValueList(List<String> filterValueList) {
this.filterValueList = filterValueList;
}
public Map<String, List<String>> getFilterMap() {
return filterMap;
}
public void setFilterMap(Map<String, List<String>> filterMap) {
this.filterMap = filterMap;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.framework.entity;
/**
* <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.io.Serializable;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class FilterHolderEntity implements Serializable {
private static final long serialVersionUID = 8767022123685151416L;
private FilterEntity filterEntity;
public FilterHolderEntity() {
}
public FilterEntity getFilterEntity() {
return filterEntity;
}
public void setFilterEntity(FilterEntity filterEntity) {
this.filterEntity = filterEntity;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
\ No newline at end of file
......@@ -9,14 +9,14 @@ package com.nepxion.discovery.plugin.framework.entity;
* @version 1.0
*/
public enum RegisterFilterType {
BLACKLIST("BLACKLIST", "黑名单"),
WHITELIST("WHITELIST", "白名单");
public enum FilterType {
BLACKLIST("blacklist", "黑名单"),
WHITELIST("whitelist", "白名单");
private String value;
private String description;
private RegisterFilterType(String value, String description) {
private FilterType(String value, String description) {
this.value = value;
this.description = description;
}
......@@ -29,8 +29,8 @@ public enum RegisterFilterType {
return description;
}
public static RegisterFilterType fromString(String value) {
for (RegisterFilterType type : RegisterFilterType.values()) {
public static FilterType fromString(String value) {
for (FilterType type : FilterType.values()) {
if (type.getValue().equalsIgnoreCase(value)) {
return type;
}
......
......@@ -9,63 +9,10 @@ package com.nepxion.discovery.plugin.framework.entity;
* @version 1.0
*/
import java.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class RegisterEntity implements Serializable {
public class RegisterEntity extends FilterHolderEntity {
private static final long serialVersionUID = -2097322826969006191L;
private RegisterFilterType filterType;
private List<String> filterValueList;
private Map<String, List<String>> filterMap = new LinkedHashMap<String, List<String>>();
public RegisterEntity() {
}
public RegisterFilterType getFilterType() {
return filterType;
}
public void setFilterType(RegisterFilterType filterType) {
this.filterType = filterType;
}
public List<String> getFilterValueList() {
return filterValueList;
}
public void setFilterValueList(List<String> filterValueList) {
this.filterValueList = filterValueList;
}
public Map<String, List<String>> getFilterMap() {
return filterMap;
}
public void setFilterMap(Map<String, List<String>> filterMap) {
this.filterMap = filterMap;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
\ No newline at end of file
package com.nepxion.discovery.plugin.framework.entity;
/**
* <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.io.Serializable;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
public class VersionEntity implements Serializable {
private static final long serialVersionUID = -6147106004826964165L;
private Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = new LinkedHashMap<String, List<DiscoveryServiceEntity>>();
public VersionEntity() {
}
public Map<String, List<DiscoveryServiceEntity>> getServiceEntityMap() {
return serviceEntityMap;
}
public void setServiceEntityMap(Map<String, List<DiscoveryServiceEntity>> serviceEntityMap) {
this.serviceEntityMap = serviceEntityMap;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object object) {
return EqualsBuilder.reflectionEquals(this, object);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this, ToStringStyle.MULTI_LINE_STYLE);
}
}
\ No newline at end of file
......@@ -26,6 +26,7 @@ import com.nepxion.discovery.plugin.framework.constant.PluginConstant;
import com.nepxion.discovery.plugin.framework.entity.DiscoveryEntity;
import com.nepxion.discovery.plugin.framework.entity.DiscoveryServiceEntity;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.entity.VersionEntity;
public class DiscoveryControlStrategy {
@Autowired
......@@ -86,7 +87,12 @@ public class DiscoveryControlStrategy {
return;
}
Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = discoveryEntity.getServiceEntityMap();
VersionEntity versionEntity = discoveryEntity.getVersionEntity();
if (versionEntity == null) {
return;
}
Map<String, List<DiscoveryServiceEntity>> serviceEntityMap = versionEntity.getServiceEntityMap();
if (MapUtils.isEmpty(serviceEntityMap)) {
return;
}
......
......@@ -19,8 +19,9 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import com.nepxion.discovery.plugin.framework.entity.FilterEntity;
import com.nepxion.discovery.plugin.framework.entity.FilterType;
import com.nepxion.discovery.plugin.framework.entity.RegisterEntity;
import com.nepxion.discovery.plugin.framework.entity.RegisterFilterType;
import com.nepxion.discovery.plugin.framework.entity.RuleEntity;
import com.nepxion.discovery.plugin.framework.exception.PluginException;
......@@ -49,9 +50,15 @@ public class RegisterControlStrategy {
return;
}
RegisterFilterType filterType = registerEntity.getFilterType();
List<String> globalFilterValueList = registerEntity.getFilterValueList();
Map<String, List<String>> filterMap = registerEntity.getFilterMap();
FilterEntity filterEntity = registerEntity.getFilterEntity();
if (filterEntity == null) {
return;
}
FilterType filterType = filterEntity.getFilterType();
List<String> globalFilterValueList = filterEntity.getFilterValueList();
Map<String, List<String>> filterMap = filterEntity.getFilterMap();
List<String> filterValueList = filterMap.get(serviceId);
List<String> allFilterValueList = new ArrayList<String>();
......
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<!-- 服务注册的黑/白名单过滤。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<register filter-type="BLACKLIST" filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
<register>
<!-- 服务注册的黑/白名单注册过滤,只在服务启动的时候生效。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<blacklist filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<!-- <whitelist filter-value="">
<service service-name="" filter-value=""/>
</whitelist> -->
</register>
<!-- 服务发现下,服务多版本调用的控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<discovery>
<!-- 服务发现的黑/白名单发现过滤,使用方式跟“服务注册的黑/白名单过滤”一致 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址被发现(全局过滤) -->
<blacklist filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址被发现 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<!-- 服务发现的多版本灰度访问控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<!-- 配置策略介绍 -->
<!-- 1. 标准配置,举例如下 -->
<!-- <service consumer-service-name="a" provider-service-name="b" consumer-version-value="1.0" provider-version-value="1.0,1.1"/> 表示消费端1.0版本,允许访问提供端1.0和1.1版本 -->
......@@ -29,8 +42,9 @@
<!-- 特殊情况处理,在使用上需要极力避免该情况发生 -->
<!-- 1. 消费端的application.properties未定义版本号(即eureka.instance.metadataMap.version不存在),则该消费端可以访问提供端任何版本 -->
<!-- 2. 提供端的application.properties未定义版本号(即eureka.instance.metadataMap.version不存在),当消费端在xml里不做任何版本配置,才可以访问该提供端 -->
<!-- 表示消费端服务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"/>
<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"/>
</version>
</discovery>
</rule>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<!-- 服务注册的黑/白名单过滤。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<register filter-type="BLACKLIST" filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
<register>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
</register>
<!-- 服务发现下,服务多版本调用的控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<discovery>
<!-- 表示消费端服务a的1.0,允许访问提供端服务b的3.0版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0" provider-version-value="3.0"/>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<version>
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0" provider-version-value="3.0"/>
</version>
</discovery>
</rule>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<!-- 服务注册的黑/白名单过滤。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<register filter-type="BLACKLIST" filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
<register>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
</register>
<!-- 服务发现下,服务多版本调用的控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<discovery>
<!-- 表示消费端服务a的1.0和1.1版本,允许访问提供端服务b的1.0和1.1和2.0版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0,1.1" provider-version-value="1.0,1.1,2.0"/>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<version>
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0,1.1" provider-version-value="1.0,1.1,2.0"/>
</version>
</discovery>
</rule>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<!-- 服务注册的黑/白名单过滤。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<register filter-type="BLACKLIST" filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
<register>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
</register>
<!-- 服务发现下,服务多版本调用的控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<discovery>
<!-- 表示消费端服务a的1.0版本,允许访问提供端服务b的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.1"/>
<!-- 表示消费端服务a的1.1版本,允许访问提供端服务b的1.0版本-->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.1" provider-version-value="1.0"/>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<version>
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="1.0" provider-version-value="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.0"/>
</version>
</discovery>
</rule>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<rule>
<!-- 服务注册的黑/白名单过滤。白名单表示只允许指定IP地址前缀注册,黑名单表示不允许指定IP地址前缀注册。每个服务只能同时开启要么白名单,要么黑名单 -->
<!-- filter-type,可选值BLACKLIST/WHITELIST,表示白名单或者黑名单 -->
<!-- service-name,表示服务名 -->
<!-- filter-value,表示黑/白名单的IP地址列表。IP地址一般用前缀来表示,如果多个用“,”分隔,不允许出现空格 -->
<!-- 表示下面所有服务,不允许10.10和11.11为前缀的IP地址注册(全局过滤) -->
<register filter-type="BLACKLIST" filter-value="10.10,11.11">
<!-- 表示下面服务,不允许172.16和10.10和11.11为前缀的IP地址注册 -->
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
<register>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
</register>
<!-- 服务发现下,服务多版本调用的控制 -->
<!-- service-name,表示服务名 -->
<!-- version-value,表示可供访问的版本,如果多个用“,”分隔,不允许出现空格 -->
<discovery>
<!-- 表示消费端服务a的任何版本,允许访问提供端服务b的任何版本 -->
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="" provider-version-value=""/>
<blacklist filter-value="10.10,11.11">
<service service-name="discovery-springcloud-example-a" filter-value="172.16"/>
</blacklist>
<version>
<service consumer-service-name="discovery-springcloud-example-a" provider-service-name="discovery-springcloud-example-b" consumer-version-value="" provider-version-value=""/>
</version>
</discovery>
</rule>
\ 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