Service 组件介绍

-

       Service 是RedKale最核心的组件,依赖于Convert、SNCP协议、Resource依赖注入。Service主要处理业务逻辑和操作数据层,是微服务架构中的单一原子服务。每一个Service实例分两种模式: 本地模式远程模式。其模式由 conf/application.xml 文件来配置。调用者其实不需要区分当前Service实例是哪种模式。
+

       Service 是RedKale最核心的组件,依赖于Convert、SNCP协议、Resource依赖注入。Service主要处理业务逻辑和操作数据层,是微服务架构中的单一原子服务。每一个Service实例分两种模式: 本地模式远程模式。其模式由 conf/application.xml 文件来配置。使用者在调用过程中通常不需要区分当前Service实例是哪种模式。
       为了能确保本地模式与远程模式自由切换,对Service的实现类有一定的约束:
             1. Service实现类会被继承,不能修饰为 final
             2. public String name()方法会被重载,不能修饰为 final
@@ -95,7 +95,7 @@ @Override public void register(UserInfo user) { - _register(true, true, true, user); + this._register(true, true, true, user); } @SncpDyn(remote = false, index = 0) @@ -108,7 +108,7 @@ @Override public UserInfo updateUsername(int userid, String username) { - return _updateUsername(true, true, false, userid, username); + return this._updateUsername(true, true, false, userid, username); } @SncpDyn(remote = false, index = 1) @@ -133,7 +133,28 @@ boolean async() default true; //分布式运行是否采用异步模式 }

      在动态生成的远程模式UserService时会根据不同参数生成相应的方法。若一个Service类没有含@MultiRun注解的方法,那么动态类只会重载public String name()和toString方法。当UserService服务仅需要部署了一个进程,由于没有其他等同服务的进程因此在UserService实例化时_client会赋值为null。

+
<resources>  
+    <group name="GROUP-A">
+        <node addr="192.168.10.111" port="7070"/>
+        <node addr="192.168.10.112" port="7070"/>
+        <node addr="192.168.10.113" port="7070"/>
+    </group>
+    <group name="GROUP-B">            
+        <node addr="192.168.20.121" port="7070"/>
+        <node addr="192.168.20.122" port="7070"/>
+    </group>
+    <group name="GROUP-C">            
+        <node addr="192.168.30.131" port="7070"/>
+        <node addr="192.168.30.132" port="7070"/>
+    </group>
+</resources>
 
+
+<!-- 配置UserService的节点组  --->
+<service name="" value="org.redkale.demo.user.UserService" groups="GROUP-A;GROUP-B;GROUP-C"/>
+
+

      如上配置,若当前进程所在IP是192.168.10.111,则UserService采用本地模式加载。执行register方法时, 先本地执行超类的register,然后远程执行同组的进程(192.168.10.112、192.168.10.113),最后远程执行异组的进程(192.168.20.121、192.168.20.122、192.168.30.131、192.168.30.132)。若当前进程所在IP是192.168.10.100,则UserService采用远程模式加载。需要注意的一点是,每个IP所在的服务必须开通SNCP协议服务以便能接收远程的调用请求。

+

Service 远程模式

      动态生成的远程模式UserService:

@SncpDyn(remote = true)