This commit is contained in:
tanghc
2019-11-22 16:32:22 +08:00
parent 82b1ff61c8
commit 1077f57ff6
5 changed files with 73 additions and 6 deletions

View File

@@ -121,3 +121,11 @@ spring.cloud.nacos.discovery.metadata.server.servlet.context-path=${server.servl
# 排除服务,多个用,隔开
sop.service.exclude=your-serviceId1,your-serviceId2
```
或者使用正则:
```properties
# 排除以"test-"开头的
# 多个正则用英文分号(;)隔开
sop.service.exclude-regex=test\\-.*
```

View File

@@ -83,6 +83,13 @@
<version>2.3.0</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>

View File

@@ -31,7 +31,11 @@ public enum EnvironmentKeys {
/**
* 排除其它微服务,多个用英文逗号隔开
*/
SOP_SERVICE_EXCLUDE("sop.service.exclude")
SOP_SERVICE_EXCLUDE("sop.service.exclude"),
/**
* 排除其它微服务,正则形式,多个用英文逗号隔开
*/
SOP_SERVICE_EXCLUDE_REGEX("sop.service.exclude-regex")
;
private String key;

View File

@@ -53,11 +53,9 @@ public abstract class BaseRegistryListener implements RegistryListener {
}
protected boolean canOperator(String serviceId) {
List<String> excludeServiceIdList = getExcludeServiceId();
for (String excludeServiceId : excludeServiceIdList) {
if (excludeServiceId.equalsIgnoreCase(serviceId)) {
return false;
}
// 被排除的服务,不能操作
if (isExcludeService(serviceId)) {
return false;
}
// nacos会不停的触发事件这里做了一层拦截
// 同一个serviceId5秒内允许访问一次
@@ -70,6 +68,32 @@ public abstract class BaseRegistryListener implements RegistryListener {
return can;
}
/**
* 是否是被排除的服务
*
* @param serviceId 服务id
* @return true
*/
private boolean isExcludeService(String serviceId) {
List<String> excludeServiceIdList = getExcludeServiceId();
for (String excludeServiceId : excludeServiceIdList) {
if (excludeServiceId.equalsIgnoreCase(serviceId)) {
return true;
}
}
// 匹配正则
String sopServiceExcludeRegex = EnvironmentKeys.SOP_SERVICE_EXCLUDE_REGEX.getValue();
if (StringUtils.isNotBlank(sopServiceExcludeRegex)) {
String[] regexArr = sopServiceExcludeRegex.split(";");
for (String regex : regexArr) {
if (serviceId.matches(regex)) {
return true;
}
}
}
return false;
}
private List<String> getExcludeServiceId() {
String excludeServiceIds = EnvironmentKeys.SOP_SERVICE_EXCLUDE.getValue();
List<String> excludeServiceIdList = new ArrayList<>(8);
@@ -80,4 +104,6 @@ public abstract class BaseRegistryListener implements RegistryListener {
excludeServiceIdList.addAll(EXCLUDE_SERVICE_ID_LIST);
return excludeServiceIdList;
}
}

View File

@@ -0,0 +1,22 @@
package com.gitee.sop.gatewaycommon;
import junit.framework.TestCase;
import org.apache.commons.lang.StringUtils;
/**
* @author tanghc
*/
public class ExcludeTest extends TestCase {
public void testRegex() {
String serviceId = "com.aaa.bbb.story-service";
String sopServiceExcludeRegex = "com\\..*;story\\-.*";
if (StringUtils.isNotBlank(sopServiceExcludeRegex)) {
String[] regexArr = sopServiceExcludeRegex.split(";");
for (String regex : regexArr) {
if (serviceId.matches(regex)) {
System.out.println("111");
}
}
}
}
}