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>动态生成的本地模式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