更新時(shí)間:2020-03-25 15:32:02 來源:動(dòng)力節(jié)點(diǎn) 瀏覽2187次
架構(gòu)、分布式、日志隊(duì)列,標(biāo)題自己都看著唬人,其實(shí)就是一個(gè)日志收集的功能,只不過中間加了一個(gè)Redis做消息隊(duì)列罷了。為什么需要消息隊(duì)列?當(dāng)系統(tǒng)中出現(xiàn)“生產(chǎn)“和“消費(fèi)“的速度或穩(wěn)定性等因素不一致的時(shí)候,就需要消息隊(duì)列,作為抽象層,彌合雙方的差異。
架構(gòu)、分布式、日志隊(duì)列,標(biāo)題自己都看著唬人,其實(shí)就是一個(gè)日志收集的功能,只不過中間加了一個(gè)Redis做消息隊(duì)列罷了。
為什么需要消息隊(duì)列?
當(dāng)系統(tǒng)中出現(xiàn)“生產(chǎn)“和“消費(fèi)“的速度或穩(wěn)定性等因素不一致的時(shí)候,就需要消息隊(duì)列,作為抽象層,彌合雙方的差異。
比如我們系統(tǒng)中常見的郵件、短信發(fā)送,把這些不需要及時(shí)響應(yīng)的功能寫入隊(duì)列,異步處理請(qǐng)求,減少響應(yīng)時(shí)間。
如何實(shí)現(xiàn)?
成熟的JMS消息隊(duì)列中間件產(chǎn)品市面上有很多,但是基于目前項(xiàng)目的架構(gòu)以及部署情況,我們采用Redis做消息隊(duì)列。
為什么用Redis?
Redis中l(wèi)ist數(shù)據(jù)結(jié)構(gòu),具有“雙端隊(duì)列”的特性,同時(shí)redis具有持久數(shù)據(jù)的能力,因此redis實(shí)現(xiàn)分布式隊(duì)列是非常安全可靠的。
它類似于JMS中的“Queue”,只不過功能和可靠性(事務(wù)性)并沒有JMS嚴(yán)格。Redis本身的高性能和"便捷的"分布式設(shè)計(jì)(replicas,sharding),可以為實(shí)現(xiàn)"分布式隊(duì)列"提供了良好的基礎(chǔ)。
提供者端
項(xiàng)目采用第三方redis插件spring-data-redis,不清楚如何使用的請(qǐng)自行谷歌或者百度。
redis.properties:
redis配置:
切面日志配置(偽代碼):
消費(fèi)者端
Redis配置:
監(jiān)聽接口:
監(jiān)聽實(shí)現(xiàn):
Q&A
【問題一】為什么使用Redis?
上面其實(shí)已經(jīng)有做說明,盡管市面上有許多很穩(wěn)定的產(chǎn)品,比如可能大家會(huì)想到的Kafka、RabbitMQ以及RocketMQ。但是由于項(xiàng)目本身使用了Redis做分布式緩存,基于省事可行的原則就選定了Redis。
【問題二】日志數(shù)據(jù)如何存儲(chǔ)?
原則上是不建議存儲(chǔ)到關(guān)系數(shù)據(jù)庫的,比如MySql,畢竟產(chǎn)生的日志數(shù)量是巨大的,建議存儲(chǔ)到Elasticsearch等非關(guān)系型數(shù)據(jù)庫。
【問題三】切面日志收集是如何實(shí)現(xiàn)的?
切面日志需要引入spring-aspects相關(guān)Jar包,并且配置使Spring采用CGLIB代理。
以上就是動(dòng)力節(jié)點(diǎn)java培訓(xùn)機(jī)構(gòu)的小編針對(duì)“Javaweb項(xiàng)目視頻大全,Redis分布式”的內(nèi)容進(jìn)行的回答,希望對(duì)大家有所幫助,如有疑問,請(qǐng)?jiān)诰€咨詢,有專業(yè)老師隨時(shí)為你服務(wù)。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743