ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jacksonSeial.setObjectMapper(om);
template.setValueSerializer(jacksonSeial);
template.setKeySerializer(stringRedisSerializer);
template.setHashKeySerializer(stringRedisSerializer);
template.setHashValueSerializer(jacksonSeial);
template.afterPropertiesSet();
return template;
}
@Bean
RedisMessageListenerContainer container(RedisConnectionFactory connectionFactory,
MessageListenerAdapter topicAdapter) {
RedisMessageListenerContainer container = new RedisMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
//訂閱了主題 webSocketMsgPush
container.addMessageListener(topicAdapter, new PatternTopic(“webSocketMsgPush”));
return container;
}
/**
-
消息監(jiān)聽器適配器,綁定消息處理器
-
@return
*/
@Bean
MessageListenerAdapter topicAdapter() {
return new MessageListenerAdapter(new RedisListener());
}
}
簡析:
WebSocketConfig.java :
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.WebSocketTransportRegistration;
/**
-
@Author JCccc
-
@Description EnableWebSocketMessageBroker-注解開啟STOMP協(xié)議來傳輸基于代理的消息,此時控制器支持使用@MessageMapping
-
@Date 2021/6/30 8:53
*/
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
private static long HEART_BEAT = 10000;
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
ThreadPoolTaskScheduler te = new ThreadPoolTaskScheduler();
te.setPoolSize(1);
te.setThreadNamePrefix(“wss-heartbeat-thread-”);
te.initialize();
config.enableSimpleBroker(“/user”, “/topic”).setHeartbeatValue(new long[]{HEART_BEAT, HEART_BEAT}).setTaskScheduler(te);
}
/**
-
開放節(jié)點
-
@param registry
*/
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
//注冊兩個STOMP的endpoint,分別用于廣播和點對點
//廣播
registry.addEndpoint(“/publicServer”).withSockJS();
//點對點
registry.addEndpoint(“/privateServer”).withSockJS();
}
@Override
public void configureWebSocketTransport(WebSocketTransportRegistration registration) {
registration.setMessageSizeLimit(500 * 1024 * 1024);
registration.setSendBufferSizeLimit(1024 * 1024 * 1024);
registration.setSendTimeLimit(200000);
}
}
InjectServiceUtil.java :
import com.stomp.stomptest.producer.PushMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
-
@Author JCccc
-
@Description pushMessage (單例)
-
@Date 2021/6/30 8:53
*/
@Component
public class InjectServiceUtil {
@Autowired
private PushMessage pushMessage;
@PostConstruct
public void init(){
InjectServiceUtil.getInstance().pushMessage = this.pushMessage;
}
/**
- 實現(xiàn)單例 start
*/
private static class SingletonHolder {
private static final InjectServiceUtil INSTANCE = new InjectServiceUtil();
}
private InjectServiceUtil (){}
public static final InjectServiceUtil getInstance() {
return SingletonHolder.INSTANCE;
}
/**
- 實現(xiàn)單例 end
*/
public PushMessage pushMessage(){
return InjectServiceUtil.getInstance().pushMessage;
}
}
RedisListener.java :
import org.springframework.data.redis.connection.Message;
import org.springframework.data.redis.connection.MessageListener;
/**
-
@Author JCccc
-
@Description redis監(jiān)聽消息
-
@Date 2021/6/30 8:53
*/
public class RedisListener implements MessageListener {
@Override
public void onMessage(Message message, byte[] bytes) {
System.out.println(“步驟1.監(jiān)聽到需要進行負載轉(zhuǎn)發(fā)的消息:” + message.toString());
InjectServiceUtil.getInstance().pushMessage().send(message.toString());
}
}
簡析:
Message.java :
/**
-
@Author JCccc
-
@Description
-
@Date 2021/8/20 9:26
*/
public class Message {
/**
- 消息編碼
*/
private String code;
/**
- 來自(保證唯一)
*/
private String form;
/**
- 去自(保證唯一)
*/
private String to;
/**
- 內(nèi)容
*/
private String content;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getForm() {
return form;
}
public void setForm(String form) {
this.form = form;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
PushMessage.java? :
自我介紹一下,小編13年上海交大畢業(yè),曾經(jīng)在小公司待過,也去過華為、OPPO等大廠,18年進入阿里一直到現(xiàn)在。
深知大多數(shù)前端工程師,想要提升技能,往往是自己摸索成長或者是報班學習,但對于培訓機構(gòu)動則幾千的學費,著實壓力不小。自己不成體系的自學效果低效又漫長,而且極易碰到天花板技術(shù)停滯不前!
因此收集整理了一份《2024年Web前端開發(fā)全套學習資料》,初衷也很簡單,就是希望能夠幫助到想自學提升又不知道該從何學起的朋友,同時減輕大家的負擔。
既有適合小白學習的零基礎(chǔ)資料,也有適合3年以上經(jīng)驗的小伙伴深入學習提升的進階課程,基本涵蓋了95%以上前端開發(fā)知識點,真正體系化!
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V:vip1024c 備注前端獲?。ㄙY料價值較高,非無償)
最后
編程基礎(chǔ)的初級開發(fā)者,計算機科學專業(yè)的學生,以及平時沒怎么利用過數(shù)據(jù)結(jié)構(gòu)與算法的開發(fā)人員希望復(fù)習這些概念為下次技術(shù)面試做準備?;蛘呦雽W習一些計算機科學的基本概念,以優(yōu)化代碼,提高編程技能。這份筆記都是可以作為參考的。
開源分享:【大廠前端面試題解析+核心總結(jié)學習筆記+真實項目實戰(zhàn)+最新講解視頻】文章來源:http://www.zghlxwxcb.cn/news/detail-850831.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-850831.html
mg-MGh00wjE-1711581558491)]
由于文件比較大,這里只是將部分目錄大綱截圖出來,每個節(jié)點里面都包含大廠面經(jīng)、學習筆記、源碼講義、實戰(zhàn)項目、講解視頻,并且后續(xù)會持續(xù)更新
如果你覺得這些內(nèi)容對你有幫助,可以添加V:vip1024c 備注前端獲?。ㄙY料價值較高,非無償)
[外鏈圖片轉(zhuǎn)存中…(img-N3SLTraN-1711581558491)]
最后
編程基礎(chǔ)的初級開發(fā)者,計算機科學專業(yè)的學生,以及平時沒怎么利用過數(shù)據(jù)結(jié)構(gòu)與算法的開發(fā)人員希望復(fù)習這些概念為下次技術(shù)面試做準備?;蛘呦雽W習一些計算機科學的基本概念,以優(yōu)化代碼,提高編程技能。這份筆記都是可以作為參考的。
開源分享:【大廠前端面試題解析+核心總結(jié)學習筆記+真實項目實戰(zhàn)+最新講解視頻】
到了這里,關(guān)于Springboot 整合 WebSocket ,使用STOMP協(xié)議+Redis 解決負載場景問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!