mirror of
https://gitee.com/durcframework/SOP.git
synced 2025-08-11 21:57:56 +08:00
2.5.4
This commit is contained in:
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user