From 538cfcdda45237c3455eb479c021ab8a7acda09f Mon Sep 17 00:00:00 2001 From: wentch <22250530@qq.com> Date: Tue, 12 Jan 2016 15:10:57 +0800 Subject: [PATCH] --- redkale.html | 29 ++++++++++++++++++++--------- service.html | 12 +++++++----- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/redkale.html b/redkale.html index 1ca41687d..7d90a18ca 100644 --- a/redkale.html +++ b/redkale.html @@ -67,7 +67,7 @@       开发一个极简单的小论坛系统。包含三个模块:
            用户模块    UserSerivice:     提供用户注册、登录、更新资料等功能, UserServlet作为接入层。
            帖子模块 ForumSerivice:     提供看帖、发帖、删帖等功能, ForumServlet作为接入层。
-             通知模块  NotifySerivice:     提供用户操作、回帖等消息通知功能, NotifyWebSocket是WebSocket的Servlet,作为接入层。
+             通知模块  NotifySerivice:     提供用户操作、回帖等消息通知功能, NotifyWebSocket是WebSocket的Servlet, 且name为 ws_notify,作为接入层。


      1、单点部署

@@ -86,8 +86,7 @@

      在生产环境需要避免单点问题,一个服务一般会部署多套。在此做个简单的容灾部署,最前端部署一个nginx作反向代理和负载均衡服务器,后面部署两套系统。

      如上图,两个进程间的Serivce都是本地模式,两者会通过SNCP服务保持数据同步,若DataSource开启了数据缓存也会自动同步。两套的配置文件相同,配置如下:

-
-<application port="5050">   
+            
<application port="5050">   
     <resources>	
         <group name="ALL">
             <node addr="192.168.50.110" port="7070"/>
@@ -101,13 +100,16 @@
         <request>
             <remoteaddr value="request.headers.X-RemoteAddress"/>
         </request>
-        <services autoload="true" groups="ALL"/>	
+        <services autoload="true" groups="ALL"/>	
         <servlets autoload="true" />
     </server> 
 
     <!-- SNCP 监听 Server -->
     <server protocol="SNCP" port="7070"> 
-        <services autoload="true"  groups="ALL"/>
+        <services autoload="true"  groups="ALL">
+            <!-- 有WebSocketServlet的服务必须配置WebSocketNodeService -->
+            <service name="ws_notify" value="org.redkale.service.WebSocketNodeService"/>
+        </services>
     </server>	
 </application>

@@ -131,10 +133,12 @@ <request> <remoteaddr value="request.headers.X-RemoteAddress"/> </request> - <services autoload="true" groups="ALL"/> + <services autoload="true" groups="ALL"> + <!-- 有WebSocketServlet的服务必须配置WebSocketNodeService --> + <service name="ws_notify" value="org.redkale.service.WebSocketNodeService"/> + </services> <servlets autoload="true" /> - </server> - + </server> </application>

      业务层中每个进程的配置相同,配置如下:

<application port="5050">  
@@ -147,7 +151,10 @@
 
     <!-- SNCP 监听 Server -->
     <server protocol="SNCP" port="7070"> 
-        <services autoload="true"  groups="ALL"/>
+        <services autoload="true" groups="ALL">
+            <!-- 有WebSocketServlet的服务必须配置WebSocketNodeService -->
+            <service name="ws_notify" value="org.redkale.service.WebSocketNodeService"/>
+        </services>
     </server>	
 </application>

@@ -183,6 +190,8 @@ <service value="org.redkale.demo.UserService" groups="USER_SERVICE"/> <service value="org.redkale.demo.NotifyService" groups="NOTIFY_SERVICE"/> <service value="org.redkale.demo.ForumService" groups="FORUM_SERVICE"/> + <!-- 有WebSocketServlet的服务必须配置WebSocketNodeService --> + <service name="ws_notify" value="org.redkale.service.WebSocketNodeService" groups="NOTIFY_SERVICE"/> </services> <servlets autoload="true" /> </server> @@ -235,6 +244,8 @@ <services autoload="true"> <service value="org.redkale.demo.UserService" groups="USER_SERVICE"/> <service value="org.redkale.demo.ForumService" groups="FORUM_SERVICE"/> + <!-- 有WebSocketServlet的服务必须配置WebSocketNodeService --> + <service name="ws_notify" value="org.redkale.service.WebSocketNodeService" groups="NOTIFY_SERVICE"/> </services> <servlets autoload="true" /> </server> diff --git a/service.html b/service.html index d39db20c7..6a01dc0b9 100644 --- a/service.html +++ b/service.html @@ -69,12 +69,13 @@

      动态生成的本地模式UserService:

@Resource(name = "")
 @SncpDyn(remote = false)
+@ResourceType({UserService.class})
 public final class _DynLocalUserService extends UserService {
 
     @Resource
     private BsonConvert _convert;
 
-    private Transport[] _sameGroupTransports;
+    private Transport _sameGroupTransport;
 
     private Transport[] _diffGroupTransports;
 
@@ -96,8 +97,8 @@
     public void _register(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, UserInfo user) {
         if (selfrunnable) super.register(user);
         if (_client == null) return;
-        if (samerunnable) _client.remote(_convert, _sameGroupTransports, 0, true, false, false, user);
-        if (diffrunnable) _client.remote(_convert, _diffGroupTransports, 0, true, true, false, user);
+        if (samerunnable) _client.remoteSameGroup(_convert, _sameGroupTransport, 0, true, false, false, user);
+        if (diffrunnable) _client.remoteDiffGroup(_convert, _diffGroupTransports, 0, true, true, false, user);
     }
 
     @Override
@@ -109,8 +110,8 @@
     public UserInfo _updateUsername(boolean selfrunnable, boolean samerunnable, boolean diffrunnable, int userid, String username) {
         UserInfo rs = super.updateUsername(userid, username);
         if (_client == null) return null;
-        if (samerunnable) _client.remote(_convert, _sameGroupTransports, 1, true, false, false, userid, username);
-        if (diffrunnable) _client.remote(_convert, _diffGroupTransports, 1, true, true, false, userid, username);
+        if (samerunnable) _client.remoteSameGroup(_convert, _sameGroupTransport, 1, true, false, false, userid, username);
+        if (diffrunnable) _client.remoteDiffGroup(_convert, _diffGroupTransports, 1, true, true, false, userid, username);
         return rs;
     }
 }
@@ -153,6 +154,7 @@
             

      动态生成的远程模式UserService:

@Resource(name = "")
 @SncpDyn(remote = true)
+@ResourceType({UserService.class})
 public final class _DynRemoteUserService extends UserService {
 
     @Resource