基於SpringBoot+Netty實現一個自己的推送服務系統


目標

實現一個WebSocket服務中心,支持水平擴展

技術棧

SpringBoot、Netty、JDK8、MySQL、Redis、RabbitMQ、MyBatis-Plus

環境搭建

主要功能點說明

WebSocket連接需要認證

服務端提供token獲取接口,WS連接前先獲取token

認證信息由服務端提供

Http接口請求需要認證

這里的接口一般就是推送接口

后續可以把推送記錄也做成接口進行查詢

支持單筆推送

根據注冊信息,查詢到用戶,進行推送

支持批量推送

根據注冊信息,查詢到用戶,進行推送

支持MQ異步推送

支持定時推送

記錄推送日志

記錄連接日志

支持集群部署

代碼設計

WebSocket連接需要認證

開發一個http接口用於獲取認證頭,WebSocket在注冊上來的時候,只有帶有正確的認證頭,服務端才允許其注冊

  • 相關設計
    • 一張保存了認證信息的表:reg_user
    • 一個獲取token的http接口
    • 一個判斷token是否合法的Service層方法
  • reg_user表結構

image-20191209160801307

  • 核心邏輯
    • 一旦認證請求通過,將token存儲到Redis中,並設置Key的過期時間
    • 校驗的時候,通過查詢Redis實現,只要還有這個token作為Key的鍵值對存在,就說么token合法
  • 待完善
    • 權限認證不夠嚴謹,僅做到了身份識別,還沒有進行精細化的權限控制
    • 關於接入方的賬號分配,目前需要手工進行
    • 認證信息的密碼是明文進行的存儲

Http接口請求需要認證

  • 編寫一個過濾器,對於需要認證的接口,獲取請求頭中的token,進行合法性校驗

MQ異步發送

  • 作為消費者,消費異步請求
  • 作為生產者,將調用結果廣播出去
    • fanout模式進行廣播
    • 同時自己也監聽此廣播,保證至少有一個消費者

使用JMeter進行WebSocket壓力測試

  • 安裝插件管理器
  • 安裝WebSocket插件

核心代碼

獲取認證token

image-20191209210053902

檢查token是否有效

image-20191209210156135

SpringBoot與Netty的整合

image-20191209210242588

  • WebSocket能夠接收的參數類型

image-20191209210341387

  • WebSocket客戶端注冊時帶的參數類型

image-20191209210406070

  • 推送返回給WebSocket客戶端的統一參數類型

image-20191209210446737

推送接口

image-20191209210541866

MQ異步推送

image-20191209210609700

源碼

源碼

本文由博客一文多發平台 OpenWrite 發布!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM