名字
tio默认集群消息中转为redis,客户端是redisson,有时候我们希望以自己的方式来实现集群,毕竟支持发布订阅模式即可,tio的作者也为我们预留了接口,我们只需要简单的实现即可
这里我才用的是ActiveMQ来实现(学习用,毕竟不需要注册中心,搭建起来简单)
Java操作ActiveMQ配置省略…..
具体实现
1定义自己的集群消息处理器
@Component
public class MyTioClusterTopic implements TioClusterTopic {
@Resource
private JmsMessagingTemplate jmsMessagingTemplate;
//存储tioClusterMessageListener实例信息,消费消息需要调用其onMessage()接口
private TioClusterMessageListener tioClusterMessageListener;
//创建一个主题
private ActiveMQTopic activeMQTopic = new ActiveMQTopic("tio_ws_spring_boot_starter");
@Override
public void publish(TioClusterVo tioClusterVo) {
//集群消息会从此处发送至mq
jmsMessagingTemplate.convertAndSend(activeMQTopic, tioClusterVo);
}
@JmsListener(destination = "tio_ws_spring_boot_starter")
public void receive(TioClusterVo tioClusterVo) {
if (tioClusterMessageListener != null) {
//将消费的消息发送至onMessage方法中即可
this.tioClusterMessageListener.onMessage("tio_ws_spring_boot_starter", tioClusterVo);
}
}
//用来获取TioClusterMessageListener进行存储
public void addMessageListener(TioClusterMessageListener tioClusterMessageListener) {
this.tioClusterMessageListener = tioClusterMessageListener;
}
}
2服务器配置
//注入自己的集群消息处理器
@Autowired
private MyTioClusterTopic myTioClusterTopic;
@Bean
public WsServerStarter wsServerStarter() throws IOException {
//设置Tio集群配置,设置集群消息处理器
TioClusterConfig clusterConfig = new TioClusterConfig(myTioClusterTopic);
// 所有连接是否集群(同一个ip是否会分布在不同的机器上),false:不集群,默认集群
clusterConfig.setCluster4all(true);
//bsid是否集群(在A机器上的客户端是否可以通过bsid发消息给B机器上的客户端),false:不集群,默认集群
clusterConfig.setCluster4bsId(true);
//id是否集群(在A机器上的客户端是否可以通过channelId发消息给B机器上的客户端),false:不集群,默认集群
clusterConfig.setCluster4channelId(true);
//群组是否集群(同一个群组是否会分布在不同的机器上),false:不集群,默认不集群
clusterConfig.setCluster4group(true);
//ip是否集群(同一个ip是否会分布在不同的机器上),false:不集群,默认集群
clusterConfig.setCluster4ip(true);
//用户是否集群(同一个用户是否会分布在不同的机器上),false:不集群,默认集群
clusterConfig.setCluster4user(true);
//设置处理器
WsServerStarter wsServerStarter = new WsServerStarter(9876, myIWsMsgHandler);
//获取到ServerTioConfig
ServerTioConfig serverTioConfig = wsServerStarter.getServerTioConfig();
//设置超时时间
serverTioConfig.setHeartbeatTimeout(60000);
//设置集群配置文件
serverTioConfig.setTioClusterConfig(clusterConfig);
//启动
wsServerStarter.start();
return wsServerStarter;
}
最新评论 我的评论
t-io为本站提供HTTP、WebSocket、Socket、页面渲染与压缩等服务,nginx为本站提供反向代理服务
© 2017-2021 钛特云 版权所有 | 浙ICP备17032976号 | 浙公网安备 33011802002129号