【springboor与tio-websocket集成】4、tio-websocket-server自定义集群模式

简介:t-io 中已经实现了集群功能,基于 Redis 的发布订阅方式实现的集群。当然,我们也可以自定义集群方式,只要是可以实现发布订阅的组件,基本都可以,例如:rabbitmq,activemq等。本次咱们采用使用比较简单的 activemq

1、引入 maven 依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-activemq</artifactId>
</dependency>

引入了 activemq 的依赖信息

2、开启 ActiveMQ

在项目启动类上加上注解 @EnableJms

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.jms.annotation.EnableJms;

/**
 * 开启activemq
 */
@EnableJms
@SpringBootApplication
public class TioApplication {

    public static void main(String[] args) {
        SpringApplication.run(TioApplication.class, args);
    }

}

3、ActiveMQ 配置信息

spring:
  jms:
    pub-sub-domain: true
  activemq:
    broker-url: tcp://127.0.0.1:61616
    # 用户、密码
    user: admin
    password: admin
    packages:
      trust-all: true

packages.trust-all 必须配置为 true,不然会报错

4、ActiveMQ 配置类

import org.apache.activemq.command.ActiveMQTopic;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.jms.Topic;

@Configuration
public class ActiveMqConfig {

    /**
     * 主题
     */
    public static final String TOPICNAME = "tio_ws_spring_boot_starter";

    @Bean
    public Topic topic() {
        return new ActiveMQTopic(TOPICNAME);
    }
}

我们注入了 ActiveMQ 的一个主题,后面我们将基于这个主题实现集群功能

5、集群发布订阅

import com.asurplus.tio.common.activemq.ActiveMqConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.jms.core.JmsMessagingTemplate;
import org.springframework.stereotype.Component;
import org.tio.cluster.TioClusterMessageListener;
import org.tio.cluster.TioClusterTopic;
import org.tio.cluster.TioClusterVo;

import javax.jms.Topic;

/**
 * 发布订阅实现
 */
@Component
public class MyTioClusterTopic implements TioClusterTopic {

    @Autowired
    private JmsMessagingTemplate jmsMessagingTemplate;
    @Autowired
    private Topic topic;

    // 存储tioClusterMessageListener实例信息,消费消息需要调用其onMessage()接口
    private TioClusterMessageListener tioClusterMessageListener;

    public void addMessageListener(TioClusterMessageListener tioClusterMessageListener) {
        this.tioClusterMessageListener = tioClusterMessageListener;
    }

    /**
     * 集群消息会从此处发送至mq
     *
     * @param tioClusterVo
     */
    @Override
    public void publish(TioClusterVo tioClusterVo) {
        jmsMessagingTemplate.convertAndSend(topic, tioClusterVo);
    }

    /**
     * 监听消息
     *
     * @param tioClusterVo
     */
    @JmsListener(destination = ActiveMqConfig.TOPICNAME)
    public void receive(TioClusterVo tioClusterVo) {
        if (tioClusterMessageListener != null) {
            // 将消费的消息发送至onMessage方法中即可
            this.tioClusterMessageListener.onMessage(ActiveMqConfig.TOPICNAME, tioClusterVo);
        }
    }
}

核心就是设置一个监听器,当收到消息的时候,发布到 activemq,被其监听到后再进行具体的业务逻辑

6、集群配置

import com.asurplus.tio.websocket.handle.MyWsMsgHandler;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.tio.cluster.TioClusterConfig;
import org.tio.server.ServerTioConfig;
import org.tio.websocket.server.WsServerStarter;

import java.io.IOException;

@Configuration
public class WebSocketConfig {

    @Autowired
    private MyTioClusterTopic myTioClusterTopic;
    @Autowired
    private MyWsMsgHandler myWsMsgHandler;

    /**
     * TIO-WEBSOCKET 配置信息
     */
    public static ServerTioConfig serverTioConfig;

    /**
     * 集群配置
     *
     * @return
     */
    @Bean
    public TioClusterConfig tioClusterConfig() {
        // 设置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);
        return clusterConfig;
    }

    /**
     * 启动类配置
     *
     * @return
     * @throws IOException
     */
    @Bean
    public WsServerStarter wsServerStarter() throws IOException {
        // 设置处理器
        WsServerStarter wsServerStarter = new WsServerStarter(6789, myWsMsgHandler);
        // 获取到ServerTioConfig
        serverTioConfig = wsServerStarter.getServerTioConfig();
        // 设置超时时间
        serverTioConfig.setHeartbeatTimeout(600000);
        // 设置集群配置文件
        serverTioConfig.setTioClusterConfig(tioClusterConfig());
        // 启动
        wsServerStarter.start();
        return wsServerStarter;
    }
}

t-io 的集群是否开启,取决于 TioClusterConfig 是否配置,现在我们的集群功能就配置好了

7、打包测试

我们需要打两个包进行测试,使用两个不同的 id 分别登录两台不同的 websocket 服务器,看其是否能正常收发消息。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
要开启Tio-WebSocket 3.7版本的WebSocket功能,需要按照以下步骤进行操作: 1. 首先,确保您已经安装了最新的Tio代码。如果编译出现错误,请访问Tio官方网站(t-io)下载最新的代码并进行安装。 2. 在您的项目中引入Tio-WebSocket的依赖。这可以通过将相关的依赖项添加到项目的构建文件(例如pom.xml)中来完成。确保您使用的是Tio-WebSocket的3.7版本。 3. 在您的代码中,按照Tio-WebSocket提供的示例教程来配置和启动WebSocket服务。您可以通过创建一个WebSocketServerStarter实例,并使用WebSocketConfig对象对其进行配置。 4. 在WebSocketConfig对象中,您可以设置服务器的IP地址、端口号和其他相关参数。您还可以配置SSL证书以启用安全套接字层(SSL)加密通信。 5. 在您的代码中,使用Tio.sendToUser和Tio.sendToGroup方法来发送消息给指定的用户或群组。您需要传递WebSocketConfig对象和要发送的消息。这些方法将帮助您实现与客户端的实时通信。 请注意,以上步骤只是一个简单的指导,具体的实现方式可能会因您的项目结构和需求而有所不同。对于更详细的配置和使用说明,建议参考Tio-WebSocket官方提供的示范教程以及相关文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [tio-websocket-showcase:fork并修改自tio-websocket-showcase官方demo,需要配合客户端demo使用](https://download.csdn.net/download/weixin_42174098/18495344)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.239^v12^control2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [展示tio-websocket的用法,t-io官方提供的唯一tio-websocket示范教程,包括wss和监控等高级特性](https://download.csdn.net/download/qq_41701956/87893319)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.239^v12^control2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [【springboortio-websocket集成】3、tio-websocket-server实现全局消息处理](https://blog.csdn.net/qq_35526951/article/details/131852367)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.239^v12^control2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值