group增加nodes属性

This commit is contained in:
redkale
2023-12-29 11:31:04 +08:00
parent fc420221cf
commit 6cade6a1da
4 changed files with 24 additions and 14 deletions

View File

@@ -104,11 +104,12 @@
一个组包含多个node 同一Service服务可以由多个进程提供这些进程称为一个GROUP且同一GROUP内的进程必须在同一机房或局域网内
name: 服务组ID长度不能超过11个字节. 默认为空字符串。 注意: name不能包含$符号。
protocol 值范围UDP TCP 默认TCP
nodes: 多个node节点值 例如:192.168.0.1:6060,192.168.0.2:6060
注意: 一个node只能所属一个group。只要存在protocol=SNCP的Server节点信息 就必须有group节点信息。
-->
<group name="" protocol="TCP">
<group name="" protocol="TCP" nodes="192.168.0.1:6060,192.168.0.2:6060">
<!--
需要将本地node的addr与port列在此处。
需要将本地node的addr与port列在此处, 也可以直接用nodes属性
同一个<node>节点值只能存在一个<group>节点内即同一个addr+port只能属于一个group。
addr: required IP地址
port: required 端口

View File

@@ -11,9 +11,9 @@
|类型|使用注解|场景说明|
| --- | --- | --- |
|默认加载|```@AutoLoad```或无注解|默认的Service会自动加载并初始化且会自动生成对应协议层Servlet|
|依赖加载|```@AutoLoad(false)```|此类Service只有被其他服务依赖或者显式的配置时才会被初始化主要用于工具类功能服务 比如```DataSource```、```CacheSource```|
|本地模式|```@Local```|此类Service无论配不配成远程模式都不会转成远程模式主要用于功能依赖本地环境或者参数无法序列化的服务|
|组件模式|```@Component```|此类Service不会被动态生成协议层Servlet主要用于无需提供对进程外提供接口的服务 比如```DataSource```、```CacheSource```的实现|
|依赖加载|```@AutoLoad(false)```|此类Service只有被其他服务依赖或者显式的配置时才会被初始化<br> 主要用于工具类功能服务, <br> 比如```DataSource```、```CacheSource```|
|本地模式|```@Local```|此类Service无论配不配成远程模式都不会转成远程模式<br>主要用于功能依赖本地环境或者参数无法序列化的服务|
|组件模式|```@Component```|此类Service不会被动态生成协议层Servlet<br>主要用于无需提供对进程外提供接口的服务,<br> 比如```DataSource```、```CacheSource```的实现|
# 基本用法
```java
@RestService(comment = "用户服务模块")
@@ -52,11 +52,8 @@ public class UserService implements Service {
## 远程模式Service
&emsp;&emsp;远程Servie其实是提供RPC接口需要配置文件中显式配置才可使用远程模式。
```xml
<group name="remote-A">
<node addr="192.168.10.111" port="7070"/>
<node addr="192.168.10.112" port="7070"/>
</group>
<group name="remote-A" nodes="192.168.10.111:7070,192.168.10.112:7070"/>
<server protocol="HTTP" host="0.0.0.0" port="8080">
<services autoload="true" group="remote-A"/>
<service name="" value="org.redkale.demo.user.UserService" group="remote-A"/>

View File

@@ -109,11 +109,12 @@
一个组包含多个node 同一Service服务可以由多个进程提供这些进程称为一个GROUP且同一GROUP内的进程必须在同一机房或局域网内
name: 服务组ID长度不能超过11个字节. 默认为空字符串。 注意: name不能包含$符号。
protocol 值范围UDP TCP 默认TCP
nodes: 多个node节点值 例如:192.168.0.1:6060,192.168.0.2:6060
注意: 一个node只能所属一个group。只要存在protocol=SNCP的Server节点信息 就必须有group节点信息。
-->
<group name="" protocol="TCP">
<group name="" protocol="TCP" nodes="192.168.0.1:6060,192.168.0.2:6060">
<!--
需要将本地node的addr与port列在此处。
需要将本地node的addr与port列在此处, 也可以直接用nodes属性
同一个<node>节点值只能存在一个<group>节点内即同一个addr+port只能属于一个group。
addr: required IP地址
port: required 端口

View File

@@ -577,14 +577,25 @@ public final class Application {
//------------------------------------------------------------------------
for (AnyValue conf : config.getAnyValues("group")) {
final String group = conf.getValue("name", "");
if (group.indexOf('$') >= 0) {
throw new RedkaleException("<group> name cannot contains '$' in " + group);
if (group.indexOf('$') >= 0 || group.indexOf('.') >= 0) {
throw new RedkaleException("<group> name cannot contains '$', '.' in " + group);
}
final String protocol = conf.getValue("protocol", "TCP").toUpperCase();
if (!"TCP".equalsIgnoreCase(protocol) && !"UDP".equalsIgnoreCase(protocol)) {
throw new RedkaleException("Not supported Transport Protocol " + conf.getValue("protocol"));
}
SncpRpcGroup rg = sncpRpcGroups.computeIfAbsent(group, protocol);
String nodes = conf.getValue("nodes");
if (Utility.isNotEmpty(nodes)) {
for (String node : nodes.replace(',', ';').split(";")) {
if (Utility.isNotBlank(node)) {
int pos = node.indexOf(':');
String addr = node.substring(0, pos).trim();
int port = Integer.parseInt(node.substring(pos + 1).trim());
rg.putAddress(new InetSocketAddress(addr, port));
}
}
}
for (AnyValue node : conf.getAnyValues("node")) {
rg.putAddress(new InetSocketAddress(node.getValue("addr"), node.getIntValue("port")));
}