东云武象应龙师

基于tio-websocket-showcase的集群

2019-4-13 23:17:55 0 待实现
看到很多人问t-io怎么集群,正好自己也要实现集群,那就开干吧。记忆中隐约记得老谭说过内置了集群,就去翻了下代码,果然有!奋战一下午,终于激活了内置的集群;废话太多了,下面上代码

第一步:集群需要配置一个redis,这里使用redisson,我用的是单机模式,redis也可以设置成集群模式

public class RedissonConfig {

private static final Logger logger = LoggerFactory.getLogger(RedissonConfig.class);
private static RedissonConfig redissonConfig;
private static RedissonClient redissonClient;

public static RedissonConfig newInstance(){
    if (redissonConfig == null) {
        synchronized (RedissonConfig.class){
            if(redissonConfig == null){
                init();
            }
        }
    }
    return redissonConfig;
}

private static void init() {
    if(redissonConfig == null){
        String host = P.get("redis.host");
        if(StrUtil.isEmpty(host)) {
            logger.error("redis服务器IP不能为空");
        }
        Integer port = P.getInt("redis.port");
        if(port == null) {
            logger.error("redis端口不能为空");
        }
        Config config = new Config();
        SingleServerConfig singleServerConfig = config.useSingleServer();

        String password = P.get("redis.password");
        if (!StrUtil.isEmpty(password)) {
            singleServerConfig.setAddress("redis://"+host+":"+port)
                    .setPassword(password)
                    .setTimeout(P.getInt("redis.timeout"));
        } else {
            singleServerConfig.setAddress("redis://"+host+":"+port)
                    .setTimeout(P.getInt("redis.timeout"));
        }

        try {
            redissonClient = Redisson.create(config);
            redissonConfig = new RedissonConfig();
        } catch (Exception e) {
            logger.error("redis连接失败");
        }
    }
}

public RedissonClient getRedissonClient(){
    return redissonClient;
}

第二步:开启内置集群能力,t-io已经内置了消息集群分发,在ShowcaseWebsocketStarter类的ShowcaseWebsocketStarter方法中加入以下代码即可

RedissonTioClusterTopic redissonTioClusterTopic = new RedissonTioClusterTopic(ShowcaseServerConfig.CHANNEL, RedissonConfig.newInstance().getRedissonClient());
TioClusterConfig tioClusterConfig = new TioClusterConfig(redissonTioClusterTopic);
tioClusterConfig.setCluster4group(true);
serverGroupContext.setTioClusterConfig(tioClusterConfig);

pom.xml集成org.redisson,这里的版本是3.10.4

app.properties增加redis配置
redis.port=6379
redis.host=localhost
redis.password=
redis.timeout=3000

这样就激活了内置的消息集群分发,群组的集群需要自己写业务实现,我后续补上......
TCP连接数:, IP数:
    发 送