日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

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

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

單機(jī)節(jié)點(diǎn)下,WebSocket連接成功后,可以直接發(fā)送消息。而多節(jié)點(diǎn)下,連接時(shí)通過(guò)nginx會(huì)代理到不同節(jié)點(diǎn)。

假設(shè)一開(kāi)始用戶連接了node1的socket服務(wù)。觸發(fā)消息發(fā)送的條件的時(shí)候也通過(guò)nginx進(jìn)行代理,假如代理轉(zhuǎn)到了node2節(jié)點(diǎn)上,那么node2節(jié)點(diǎn)的socket服務(wù)就發(fā)送不了消息,因?yàn)橐婚_(kāi)始用戶注冊(cè)的是node1節(jié)點(diǎn)。這就導(dǎo)致了消息發(fā)送失敗。

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

為了解決這一方案,消息發(fā)送時(shí),就需要一個(gè)中間件來(lái)記錄,這樣,三個(gè)節(jié)點(diǎn)都可以獲取消息,然后在根據(jù)條件進(jìn)行消息推送。

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

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、創(chuàng)建業(yè)務(wù)處理類 Demo.class,該類可以實(shí)現(xiàn)MessageListener接口后重寫(xiě)onMessage方法,也可以不實(shí)現(xiàn),自己寫(xiě)方法。

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消息訂閱-業(yè)務(wù)處理 * @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('內(nèi)容:'+message.getBody()); logger.info('交換機(jī):'+message.getChannel()); }}

3、創(chuàng)建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發(fā)布訂閱配置 * @author: zhang yi * @create: 2021-01-25 16:49 */@Configuration@EnableCachingpublic class PubSubConfig { Logger logger = LoggerFactory.getLogger(this.getClass()); //如果是多個(gè)交換機(jī),則參數(shù)為(RedisConnectionFactory connectionFactory, // MessageListenerAdapter listenerAdapter, // MessageListenerAdapter listenerAdapter2) @Bean RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory, MessageListenerAdapter listenerAdapter) { RedisMessageListenerContainer container = new RedisMessageListenerContainer(); container.setConnectionFactory(connectionFactory); // 可以添加多個(gè) messageListener,配置不同的交換機(jī) container.addMessageListener(listenerAdapter, new PatternTopic('channel:demo')); //container.addMessageListener(listenerAdapter2, new PatternTopic('channel:demo2')); return container; } /** * 消息監(jiān)聽(tīng)器適配器,綁定消息處理器,利用反射技術(shù)調(diào)用消息處理器的業(yè)務(wù)方法 * @param demo 第一步的業(yè)務(wù)處理類 * @return */ @Bean MessageListenerAdapter listenerAdapter(Demo demo) { logger.info('----------------消息監(jiān)聽(tīng)器加載成功----------------'); // onMessage 就是方法名,基于反射調(diào)用 return new MessageListenerAdapter(demo, 'onMessage'); } /** * 多個(gè)交換機(jī)就多寫(xiě)一個(gè) * @param subCheckOrder * @return */ //@Bean //MessageListenerAdapter listenerAdapter2(SubCheckOrder subCheckOrder) { // logger.info('----------------消息監(jiān)聽(tīng)器加載成功----------------'); // return new MessageListenerAdapter(subCheckOrder, 'onMessage'); //} @Bean StringRedisTemplate template(RedisConnectionFactory connectionFactory) { return new StringRedisTemplate(connectionFactory); }}

4、消息發(fā)布

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

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩超碰人人爽人人做人人添| 女主播福利一区| 久久久蜜桃一区二区人| 亚洲国产福利| 精品欧美一区二区三区在线观看| 久久一级电影| 亚洲一区二区免费看| 日韩在线观看一区二区| 久久激情五月激情| 国产一区丝袜| 婷婷亚洲综合| 亚洲精品少妇| 久久精品资源| 欧美亚洲国产激情| 最新亚洲国产| 国产精品亚洲欧美| 成人日韩在线| 1024精品久久久久久久久| 丝袜美腿一区二区三区| 日韩欧美四区| 成人在线免费观看网站| 欧美va天堂| 中文字幕一区二区av| 国产精品欧美在线观看| 久久久久91| 亚州精品视频| 国产一区二区三区视频在线| 欧美99久久| 国产探花一区在线观看| 免费高潮视频95在线观看网站| 视频一区二区不卡| 精品久久福利| 狠狠色狠狠色综合日日tαg| 欧美日韩网址| 在线日韩电影| 欧美视频精品全部免费观看| 九九精品调教| 欧美视频二区| 亚洲免费成人| 久久精品国内一区二区三区| 国产亚洲精品自拍| 韩日一区二区| 日韩高清欧美激情| 欧洲激情综合| 狠狠久久伊人| 亚洲精品女人| 久久婷婷久久| 国产精品嫩模av在线| 日韩午夜一区| 日韩成人精品一区| 91大神在线观看线路一区| 免费精品国产| 国内精品麻豆美女在线播放视频| 日韩精品一级二级| 日韩久久一区二区三区| 国产亚洲久久| 亚洲特色特黄| 美女久久精品| 日韩高清一区二区| 在线综合视频| 香蕉成人av| 美女视频黄免费的久久| 亚洲一区黄色| 激情中国色综合| 日精品一区二区三区| 欧美99久久| 日韩精品中文字幕第1页| 国产欧美日韩一区二区三区在线| 免费日韩av| 一区二区自拍| 久久精品av| 日本欧美国产| 麻豆国产精品| 国产极品一区| 国产欧美三级| 日韩不卡一二三区| 亚洲免费一区三区| 黄色欧美日韩| 91精品精品| 日韩精品永久网址| 97国产成人高清在线观看| 国产精品嫩模av在线| 日韩欧美高清一区二区三区| 视频一区二区三区中文字幕| 亚洲女同中文字幕| 欧美日韩视频| 欧美日韩国产一区二区三区不卡| 日本综合字幕| 日韩在线看片| 日韩久久精品网| 精品日韩视频| 欧美一区二区性| 久久夜夜操妹子| 日韩国产在线| 久久久成人网| 亚洲精品888| 美日韩精品视频| 亚洲精品动态| 亚欧洲精品视频在线观看| 婷婷亚洲精品| 国产欧美日韩影院| 欧美激情网址| 日本一二区不卡| 日韩在线短视频| 亚洲国产综合在线看不卡| 精品一区免费| 日韩在线一区二区| 日韩一区免费| 国产欧美日韩一区二区三区四区 | 欧美日韩一区二区三区不卡视频 | 91看片一区| 欧美日韩一区二区三区视频播放| 久久精品高清| 免费在线观看不卡| 免费观看在线色综合| 7777精品| 久久精品国产免费| 日本久久成人网| 国产精品腿扒开做爽爽爽挤奶网站| 蜜臀国产一区二区三区在线播放| 香蕉久久久久久| 久久永久免费| 久久国产中文字幕| 久久xxxx精品视频| 国产亚洲精aa在线看| 国产一区二区久久久久| 欧美亚洲国产一区| 亚洲免费毛片| 精品一区91| 欧美.日韩.国产.一区.二区| 在线看片日韩| 高清久久一区| 蜜乳av另类精品一区二区| 国产精品久久久网站| 久久精品国内一区二区三区水蜜桃| 久久最新视频| 丰满少妇一区| 老司机精品久久| 九九久久国产| 亚洲一区二区成人| 久久影院一区二区三区| 国精品一区二区| 国产精品v日韩精品v欧美精品网站 | 亚洲精品视频一二三区| 国产精品亚洲综合在线观看| 88xx成人免费观看视频库| 在线国产精品一区| 中文字幕在线高清| 亚洲人www| 播放一区二区| 国产探花在线精品| 亚洲一级在线| 欧美成人aaa| 免播放器亚洲| sm捆绑调教国产免费网站在线观看| 久久亚洲风情| 福利在线免费视频| 日韩avvvv在线播放| 午夜免费一区| 成人国产精品一区二区网站| 亚洲精品看片| 亚洲手机在线| 国产不卡精品| 欧美在线观看天堂一区二区三区| 免费污视频在线一区| 国产美女久久| 老牛国产精品一区的观看方式| 国产一区2区在线观看| 蜜桃视频第一区免费观看| 国产v日韩v欧美v| 日韩激情中文字幕| 国产精品97| 91亚洲一区| 国产激情一区| 日韩高清不卡一区| 丝袜诱惑制服诱惑色一区在线观看| 在线看片福利| 国产精品videossex久久发布 | 日韩精品免费一区二区在线观看| 欧美日韩亚洲一区三区| 欧美精品一二| zzzwww在线看片免费| 国产精一区二区| 日韩一区中文| 一区二区高清| 亚洲欧洲午夜| 亚洲欧美一区在线| 亚洲成av在线| 狠狠躁少妇一区二区三区| 麻豆久久一区| 国产极品模特精品一二 | 亚洲精品影视| 视频一区二区三区中文字幕| 美女久久久久| 国产精品99久久精品| 欧美天堂一区二区| 日韩av午夜在线观看| 蜜桃91丨九色丨蝌蚪91桃色| 欧美大黑bbbbbbbbb在线| 香蕉精品久久|