$cluster
This commit is contained in:
@@ -152,6 +152,7 @@
|
|||||||
groups: 所属组的节点,多个节点值用;隔开,如果配置文件中存在多个SNCP协议的Server节点,需要显式指定group属性.
|
groups: 所属组的节点,多个节点值用;隔开,如果配置文件中存在多个SNCP协议的Server节点,需要显式指定group属性.
|
||||||
当 protocol == SNCP 时 group表示当前Server与哪些节点组关联。
|
当 protocol == SNCP 时 group表示当前Server与哪些节点组关联。
|
||||||
当 protocol != SNCP 时 group只能是空或者一个group的节点值,不能为多个节点值。
|
当 protocol != SNCP 时 group只能是空或者一个group的节点值,不能为多个节点值。
|
||||||
|
特殊值"$cluster", 视为通过第三方服务注册发现管理工具来获取远程模式的ip端口信息
|
||||||
-->
|
-->
|
||||||
<services autoload="true" includes="" excludes="">
|
<services autoload="true" includes="" excludes="">
|
||||||
|
|
||||||
|
|||||||
@@ -407,7 +407,7 @@ public final class ClassFilter<T> {
|
|||||||
str = str.trim();
|
str = str.trim();
|
||||||
if (str.endsWith(";")) str = str.substring(0, str.length() - 1);
|
if (str.endsWith(";")) str = str.substring(0, str.length() - 1);
|
||||||
}
|
}
|
||||||
if (str != null) groups.addAll(Arrays.asList(str.split(";")));
|
if (str != null) this.groups.addAll(Arrays.asList(str.split(";")));
|
||||||
this.property = property;
|
this.property = property;
|
||||||
this.autoload = autoload;
|
this.autoload = autoload;
|
||||||
this.expect = expect;
|
this.expect = expect;
|
||||||
@@ -417,7 +417,7 @@ public final class ClassFilter<T> {
|
|||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return this.getClass().getSimpleName() + "[thread=" + Thread.currentThread().getName()
|
return this.getClass().getSimpleName() + "[thread=" + Thread.currentThread().getName()
|
||||||
+ ", type=" + this.type.getSimpleName() + ", name=" + name + ", groups=" + groups + "]";
|
+ ", type=" + this.type.getSimpleName() + ", name=" + name + ", groups=" + this.groups + "]";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -444,6 +444,10 @@ public final class ClassFilter<T> {
|
|||||||
return property;
|
return property;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean containsGroup(String group) {
|
||||||
|
return groups != null && groups.contains(group);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isEmptyGroups() {
|
public boolean isEmptyGroups() {
|
||||||
return groups == null || groups.isEmpty();
|
return groups == null || groups.isEmpty();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -408,10 +408,10 @@ public abstract class NodeServer {
|
|||||||
final HashSet<String> groups = entry.getGroups(); //groups.isEmpty()表示<services>没有配置groups属性。
|
final HashSet<String> groups = entry.getGroups(); //groups.isEmpty()表示<services>没有配置groups属性。
|
||||||
if (groups.isEmpty() && isSNCP() && this.sncpGroup != null) groups.add(this.sncpGroup);
|
if (groups.isEmpty() && isSNCP() && this.sncpGroup != null) groups.add(this.sncpGroup);
|
||||||
|
|
||||||
final boolean localed = (this.sncpAddress == null && entry.isEmptyGroups() && !serviceImplClass.isInterface() && !Modifier.isAbstract(serviceImplClass.getModifiers())) //非SNCP的Server,通常是单点服务
|
final boolean localed = !entry.containsGroup("$cluster") && ((this.sncpAddress == null && entry.isEmptyGroups() && !serviceImplClass.isInterface() && !Modifier.isAbstract(serviceImplClass.getModifiers())) //非SNCP的Server,通常是单点服务
|
||||||
|| groups.contains(this.sncpGroup) //本地IP含在内的
|
|| groups.contains(this.sncpGroup) //本地IP含在内的
|
||||||
|| (this.sncpGroup == null && entry.isEmptyGroups()) //空的SNCP配置
|
|| (this.sncpGroup == null && entry.isEmptyGroups()) //空的SNCP配置
|
||||||
|| serviceImplClass.getAnnotation(Local.class) != null;//本地模式
|
|| serviceImplClass.getAnnotation(Local.class) != null);//本地模式
|
||||||
if (localed && (serviceImplClass.isInterface() || Modifier.isAbstract(serviceImplClass.getModifiers()))) continue; //本地模式不能实例化接口和抽象类的Service类
|
if (localed && (serviceImplClass.isInterface() || Modifier.isAbstract(serviceImplClass.getModifiers()))) continue; //本地模式不能实例化接口和抽象类的Service类
|
||||||
final ResourceFactory.ResourceLoader resourceLoader = (ResourceFactory rf, final Object src, final String resourceName, Field field, final Object attachment) -> {
|
final ResourceFactory.ResourceLoader resourceLoader = (ResourceFactory rf, final Object src, final String resourceName, Field field, final Object attachment) -> {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -529,7 +529,7 @@ public abstract class Sncp {
|
|||||||
final AnyValue conf) {
|
final AnyValue conf) {
|
||||||
if (serviceTypeOrImplClass == null) return null;
|
if (serviceTypeOrImplClass == null) return null;
|
||||||
if (!Service.class.isAssignableFrom(serviceTypeOrImplClass)) return null;
|
if (!Service.class.isAssignableFrom(serviceTypeOrImplClass)) return null;
|
||||||
Set<String> groups = groups0 == null ? new HashSet<>() : groups0;
|
final Set<String> groups = groups0 == null ? new HashSet<>() : groups0;
|
||||||
ResourceFactory.checkResourceName(name);
|
ResourceFactory.checkResourceName(name);
|
||||||
int mod = serviceTypeOrImplClass.getModifiers();
|
int mod = serviceTypeOrImplClass.getModifiers();
|
||||||
boolean realed = !(java.lang.reflect.Modifier.isAbstract(mod) || serviceTypeOrImplClass.isInterface());
|
boolean realed = !(java.lang.reflect.Modifier.isAbstract(mod) || serviceTypeOrImplClass.isInterface());
|
||||||
|
|||||||
Reference in New Issue
Block a user