soul 入门 第十章 多网关做集群
1、随着业务发展,请求量增加,一台网关满足不巨大的负荷,基于此soul实现了集群模式。
2、网关集群搭建过程
网关连接admin采用默认方式websocket连接
启动admin
启动网关 端口为 9195
启动服务soul-examples-http
通过网关访问http接口,结果如下图
可以通过网关正确访问服务的接口
下面启动第二个网关,端口为9295,连上同一个admin
访问结果如下图
同样,访问是成功的,说明网关做集群还是比较简单的。
2、网关集群实现原理
网关在启动时候连接上全量数据同步到网关,当在admin有配置数据改变时也把数据同步到网关,主要代码请看WebsocketCollector 的send方法
public static void send(final String message, final DataEventTypeEnum type) {
if (StringUtils.isNotBlank(message)) {
// 网关主动向admin发请求更新数据,类型为DataEventTypeEnum.MYSELF
if (DataEventTypeEnum.MYSELF == type) {
try {
Session session = (Session) ThreadLocalUtil.get(SESSION_KEY);// 通过本地线程变量传递session
if (session != null) {
session.getBasicRemote().sendText(message);
}
} catch (IOException e) {
log.error("websocket send result is exception: ", e);
}
return;
}
// 当配置数据改变时,向所有连接上来的网关依次发送请求
for (Session session : SESSION_SET) {
try {
session.getBasicRemote().sendText(message);
} catch (IOException e) {
log.error("websocket send result is exception: ", e);
}
}
}
}
3、admin有必要做集群吗?如何做?