pull/1/head
tanghc 6 years ago
parent 82b1ff61c8
commit 1077f57ff6
  1. 8
      doc/docs/files/90100_常见问题.md
  2. 7
      sop-common/sop-gateway-common/pom.xml
  3. 6
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/manager/EnvironmentKeys.java
  4. 36
      sop-common/sop-gateway-common/src/main/java/com/gitee/sop/gatewaycommon/route/BaseRegistryListener.java
  5. 22
      sop-common/sop-gateway-common/src/test/java/com/gitee/sop/gatewaycommon/ExcludeTest.java

@ -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\\-.*
```

@ -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>

@ -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;

@ -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;
}
}

@ -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");
}
}
}
}
}
Loading…
Cancel
Save