soul 入门 第十章 多网关做集群

143 阅读1分钟

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有必要做集群吗?如何做?