簡介
最近把個(gè)人所學(xué)會(huì)的技術(shù)都整合了一下搪搏,整合的都是一些常用的技術(shù)。男人就是要直接递览,碼云項(xiàng)目地址:https://gitee.com/viu666/technology-integration
該項(xiàng)目為純后端項(xiàng)目叼屠,不涉及任何前端技術(shù),所以需要讀者有一定的前后端分離思想绞铃。你問我為什么沒有搞前端镜雨?畢竟男人就是要專一,[滑稽]要搞也是偷偷搞啊儿捧,我會(huì)告訴你荚坞?
技術(shù)
該項(xiàng)目以SpringBoot作為項(xiàng)目基礎(chǔ)框架挑宠,整合的技術(shù)有:
- Spring Security
- Spring Retry
- Spring Mail
- JWT
- Mybatis
- Redis
- RabbitMQ
- Netty
功能
- 認(rèn)證與授權(quán)采用SpringSecurity方案,只提供jwt認(rèn)證方式
- 使用了雙數(shù)據(jù)源進(jìn)行數(shù)據(jù)讀取颓影,采用MySQL數(shù)據(jù)庫
- 使用Redis緩存數(shù)據(jù)各淀,Redis為單節(jié)點(diǎn)模式,后期可能會(huì)添加主從或集群模式
- 使用RabbitMQ搭建隊(duì)列诡挂,由于沒有業(yè)務(wù)邏輯碎浇,只是簡單的發(fā)送消息到隊(duì)列,以及實(shí)現(xiàn)常見的死信隊(duì)列和監(jiān)聽等
- 使用Netty進(jìn)行客戶端通信璃俗,已實(shí)現(xiàn)完整的聊天功能
- 使用阿里云短信服務(wù)實(shí)現(xiàn)短信驗(yàn)證碼功能
- 使用Redis對(duì)接口進(jìn)行限流以及PV統(tǒng)計(jì)
聊天功能實(shí)現(xiàn)進(jìn)度:
注意:客戶端不要求必須使用Netty框架奴璃,傳輸字符即可
- 客戶端與服務(wù)端建立socket連接后需要發(fā)送token至服務(wù)器進(jìn)行socket的認(rèn)證,認(rèn)證后服務(wù)器會(huì)返回認(rèn)證結(jié)果的消息
- 客戶端A與發(fā)消息至客戶端B時(shí)城豁,需要驗(yàn)證socket連接是否已認(rèn)證
- 客戶端認(rèn)證完成后苟穆,系統(tǒng)會(huì)讀取Rabbit未讀消息隊(duì)列,如果存在未讀消息則將消息發(fā)送至客戶端
- A發(fā)送消息至B時(shí)唱星,會(huì)先判斷B是否在線雳旅,如果在線則直接將消息發(fā)送到B客戶端,否則將消息緩存至未讀隊(duì)列中
- 消息發(fā)送完之后魏颓,系統(tǒng)會(huì)將消息存儲(chǔ)到durable隊(duì)列中
- 監(jiān)聽器監(jiān)聽到durable隊(duì)列中有消息時(shí),則會(huì)將該消息緩存至數(shù)據(jù)庫中
短信驗(yàn)證碼實(shí)現(xiàn):
注意:短信驗(yàn)證碼采用6位純數(shù)字
- 客戶端請求發(fā)送短信驗(yàn)證碼吱晒,服務(wù)端會(huì)先進(jìn)行判斷該號(hào)碼上次發(fā)送短信時(shí)間間隔是否大于2分鐘
- 發(fā)送短信驗(yàn)證碼成功后甸饱,會(huì)將短信驗(yàn)證碼緩存到Redis中,方便下次驗(yàn)證
- 短信驗(yàn)證碼的有效期為5分鐘仑濒,利用Redis的過期功能實(shí)現(xiàn)
系統(tǒng)功能:
- 使用Redis進(jìn)行接口限流叹话,利用zset數(shù)據(jù)類型解決,具體參照代碼
- 使用Redis統(tǒng)計(jì)系統(tǒng)請求PV量
這個(gè)算是方便自己以后復(fù)制粘貼代碼用的吧墩瞳,哈哈哈哈哈哈哈驼壶,可能不會(huì)詳細(xì)的介紹某個(gè)技術(shù),都說了叫整合嘛喉酌,你能拿我怎么辦热凹。整合方面會(huì)講的詳細(xì)些,項(xiàng)目里面不會(huì)有很具體的業(yè)務(wù)泪电,盡量保證業(yè)務(wù)是比較完整的般妙,如果有什么建議或者問題直接在簡書發(fā)表就好了,想加扣扣啊相速,你找到我就給你加碟渺。
對(duì)了,編碼軟件用的是IDEA