栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringBoot Websocket 集群方案

SpringBoot Websocket 集群方案

集群方案如下:

  1. 采用Redis的订阅与发布,由于Websocket无法被序列化,不能进行缓存,所以不能直接将websocket消息缓存到Redis中。
  2. 采用单纯的RabbitMQ,利用fanouttopic进行消息订阅,将Websocket消息结果发送到消息队列中,在进行转发接收。参考代码
  3. 采用RabbitMQ+MQTT消息协议,可以在RabbitMQ官网上看到
  4. 采用RabbitMQ+STOMP消息协议,可以在RabbitMQ官网上看到【推荐使用】
  5. 还能够利用负载均衡的源地址哈希法,将ip通过一定的hash算法转发到一台固定的服务器(这个的话,对代码几乎没有改动,不过缺点也比较大)

接下来介绍如何使用RabbitMQ+STOMP,代码如下

maven

        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-tomcat
            provided
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
            
                
                    org.junit.vintage
                    junit-vintage-engine
                
            
        


        
        
            org.springframework.boot
            spring-boot-starter-websocket
        
        
            org.webjars
            webjars-locator-core
        
        
            org.webjars
            sockjs-client
            1.0.2
        
        
            org.webjars
            stomp-websocket
            2.3.3
        

        
        
            org.springframework.boot
            spring-boot-starter-amqp
        


        
        commons-lang
        commons-lang
        2.6
        

    
配置文件
spring:
  rabbitmq:
    host: 192.168.66.10
    port: 5672
    username: guest
    password: guest
RabbitMQ配置类
@Configuration
public class RabbitConfig {
 
    @Bean
    public Queue helloQueue() {
        return new Queue("hello");
    }
 
}
Websocket配置类
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 
    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        
        config.enableSimpleBroker("/topic","/all");
 
        
        config.setApplicationDestinationPrefixes("/app");
    }
 
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
 
        
        registry.addEndpoint("/websocket").setAllowedOrigins("*").withSockJS();
    }
 
 
}
接收消息并发送
@CrossOrigin(allowCredentials = "true", allowedHeaders = "*")
@RestController
public class WebSocketTestController {
 
    @Autowired
    private SimpMessagingTemplate messagingTemplate;

 

    //RequestMessage消息结果集
    @MessageMapping("/chat")
    public void messageHandling(RequestMessage requestMessage) throws Exception {
        String destination = "/topic/" + HtmlUtils.htmlEscape(requestMessage.getRoom());//htmlEscape  转换为HTML转义字符表示

        String content = HtmlUtils.htmlEscape(requestMessage.getContent());

 
        System.out.println( requestMessage.getRoom() );
        System.out.println( content );
 
 
      
 
        messagingTemplate.convertAndSend(destination, requestMessage);
    }
 
}
前端页面



    
    My WebSocket

    
    
    
    

    

    





频道号:




做题区: 频道号:
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/313144.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号