色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

springboot基于Redis發布訂閱集群下WebSocket的解決方案

瀏覽:11日期:2023-03-27 17:15:12
一、背景

單機節點下,WebSocket連接成功后,可以直接發送消息。而多節點下,連接時通過nginx會代理到不同節點。

假設一開始用戶連接了node1的socket服務。觸發消息發送的條件的時候也通過nginx進行代理,假如代理轉到了node2節點上,那么node2節點的socket服務就發送不了消息,因為一開始用戶注冊的是node1節點。這就導致了消息發送失敗。

springboot基于Redis發布訂閱集群下WebSocket的解決方案

為了解決這一方案,消息發送時,就需要一個中間件來記錄,這樣,三個節點都可以獲取消息,然后在根據條件進行消息推送。

二、解決方案(springboot 基于 Redis發布訂閱)

1、依賴

<!-- redis --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!-- websocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId></dependency>

2、創建業務處理類 Demo.class,該類可以實現MessageListener接口后重寫onMessage方法,也可以不實現,自己寫方法。

import com.alibaba.fastjson.JSON;import com.dy.service.impl.OrdersServiceImpl;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.redis.connection.Message;import org.springframework.data.redis.connection.MessageListener;import org.springframework.stereotype.Component; import java.util.HashMap; /** * @program: * @description: redis消息訂閱-業務處理 * @author: zhang yi * @create: 2021-01-25 16:46 */@Componentpublic class Demo implements MessageListener { Logger logger = LoggerFactory.getLogger(this.getClass()); @Override public void onMessage(Message message, byte[] pattern) { logger.info('消息訂閱成功---------'); logger.info('內容:'+message.getBody()); logger.info('交換機:'+message.getChannel()); }}

3、創建PubSubConfig配置類

import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.cache.annotation.EnableCaching;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.data.redis.connection.RedisConnectionFactory;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.data.redis.listener.PatternTopic;import org.springframework.data.redis.listener.RedisMessageListenerContainer;import org.springframework.data.redis.listener.adapter.MessageListenerAdapter; /** * @program: * @description: redis發布訂閱配置 * @author: zhang yi * @create: 2021-01-25 16:49 */@Configuration@EnableCachingpublic class PubSubConfig { Logger logger = LoggerFactory.getLogger(this.getClass()); //如果是多個交換機,則參數為(RedisConnectionFactory connectionFactory, // MessageListenerAdapter listenerAdapter, // MessageListenerAdapter listenerAdapter2) @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); // 可以添加多個 messageListener,配置不同的交換機 container.addMessageListener(listenerAdapter, new PatternTopic('channel:demo')); //container.addMessageListener(listenerAdapter2, new PatternTopic('channel:demo2')); return container; } /** * 消息監聽器適配器,綁定消息處理器,利用反射技術調用消息處理器的業務方法 * @param demo 第一步的業務處理類 * @return */ @Bean MessageListenerAdapter listenerAdapter(Demo demo) { logger.info('----------------消息監聽器加載成功----------------'); // onMessage 就是方法名,基于反射調用 return new MessageListenerAdapter(demo, 'onMessage'); } /** * 多個交換機就多寫一個 * @param subCheckOrder * @return */ //@Bean //MessageListenerAdapter listenerAdapter2(SubCheckOrder subCheckOrder) { // logger.info('----------------消息監聽器加載成功----------------'); // return new MessageListenerAdapter(subCheckOrder, 'onMessage'); //} @Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); }}

4、消息發布

@Autowiredprivate RedisTemplate<String, Object> redisTemplate; redisTemplate.convertAndSend('channel:demo', '我是內容');三、具體用法 socket連接成功。 socket消息推送時,把信息發布到redis中。socket服務訂閱redis的消息,訂閱成功后進行推送。集群下的socket都能訂閱到消息,但是只有之前連接成功的節點能推送成功,其余的無法推送。

標簽: Spring
相關文章:
主站蜘蛛池模板: 加勒比一区在线 | 国产精品视频久久 | 国产精品国产精品国产三级普 | 国产亚洲人成网站在线观看 | 久久免费国产精品一区二区 | 日韩欧美精品一区二区三区 | 欧美一级视频在线观看 | 老司机午夜精品网站在线观看 | yy6080久久亚洲精品 | 亚洲欧美第一 | 三级黄a | 成人国产在线看不卡 | 欧美一级专区免费大片俄罗斯 | 日本一在线中文字幕天堂 | 亚洲天堂视频在线观看 | 亚洲二区在线观看 | 国产日本韩国 | 日本高清视频一区二区 | 国产孕妇孕交视频在线观看 | 亚洲国产欧美一区 | 精品一区二区三区中文 | 日本苍井一级毛片 | 国产一区二区三区免费 | 天堂亚洲网 | 成人a毛片视频免费看 | 亚洲精品国产精品国自产网站 | 午夜性刺激免费视频观看不卡专区 | 欧美一区永久视频免费观看 | 欧美日韩精品一区二区免费看 | 国产精品黄网站免费进入 | 91久久国产综合精品女同国语 | 中文字幕精品一区二区2021年 | 亚洲精品资源在线 | 萌白酱福利视频在线网站 | 秘书高跟黑色丝袜国产91在线 | 久久精品亚洲乱码伦伦中文 | 国产亚洲精品久久久久久久 | 成人免费高清视频网址 | 美女被躁免费视频软件 | 国产欧美日本 | 手机看片自拍自自拍日韩免费 |