最近重構公司消息服務的架構設計

来源:http://www.cnblogs.com/assion/archive/2017/10/27/7741562.html
-Advertisement-
Play Games

目標 研發一套獨立的消息系統,此系統進行集中配置管理供各業務系統使用,用於支撐站內信、簡訊通知、簡訊驗證碼、郵件、微信消息、APP消息、IM等消息形式。 架構 1) 基於消息隊列採用發佈、訂閱模式。消息的生產者為對外的消息介面,接收業務系統消息後將消息寫入到消息隊列指定的topic,訂閱者對消息進行 ...


目標

研發一套獨立的消息系統,此系統進行集中配置管理供各業務系統使用,用於支撐站內信、簡訊通知、簡訊驗證碼、郵件、微信消息、APP消息、IM等消息形式。

 

架構

 

 

1) 基於消息隊列採用發佈、訂閱模式。消息的生產者為對外的消息介面,接收業務系統消息後將消息寫入到消息隊列指定的topic,訂閱者對消息進行處理並行的發送消息。

2) 所有通知消息定義唯一“消息ID”來標識消息類型。

3) 通知消息由各消息模塊(簡訊、郵件、站內信、微信、APP)自己負責本消息的發送,去讀取消息節點配置信息,根據當前的消息ID判斷自己是否需要發送消息,是則發送否則丟棄。

4) 消息體,消息體採用JSON報文格式,方便各系統之間對接。

 

消息數據定義

 

 

 

{

  msghead:

{

  msgtype:””,

  msgid:””,

  rcvuid:””,

  rcvcid:””,

  rcvmobile:””,

  rcvemail:””,

  time:””,

  system:””

  }

  ,

  msgbody:

  {

text:””,

noticemsg:””,

wxmsg:””,

appmsg:””,

immsg:””,

smsmsg:[{},{}]

  }

}

 

 

欄位

說明

msghead

消息頭

 

 Msgtype

消息類型

消息類型:notice/sms/email/im/wx

 Msgid

消息id

定義全局唯一

 Rcvuid

接收帳號id

 

 Rcvcid

接收公司id

 

 Rcvmobile

接收手機號

 

 Rcvemail

接收郵箱

 

 Time

發送時間

 

 System

發送系統模塊

雲倉

Msgbody

消息體

 

 Text

文本消息內容

 

 Noticemsg

站內信消息內容

 

 Wxmsg

微信消息內容

 

 Appmsg

APP消息內容

 

 Immsg

IM消息內容

 

 Smsmsg

簡訊消息內容

標簽->值數組,供簡訊模板使用

 

 

 

項目結構

 

消息介面API(msg_api)

1) 負責接收業務系統發送消息請求,將消息寫到消息隊列中;

2) 提供介面供業務系統查詢,如查詢用戶的站內信消息列表、查詢驗證碼是否正確等;

3) 提供數據介面供管理平臺使用,如配置信息發送結點;

 

 

簡訊處理程式(msg_handle_sms)

1) 負責訂閱消息,讀取消息進行簡訊發送;

2) 負責驗證碼的生成處理;

3) 數據操作調用消息介面API;

4) 通知消息需要讀取配置信息決定當前消息發送或丟棄;

 

 

郵件處理程式(msg_handle_email)

1) 負責訂閱消息,讀取消息進行郵件發送;

2) 數據操作調用消息介面API;

3) 通知消息需要讀取配置信息決定當前消息發送或丟棄;

 

 

站內信處理程式(msg_handle_notice)

1) 負責訂閱消息,讀取消息進行通知;

2) 通知消息需要讀取配置信息決定當前消息發送或丟棄;

3) 數據操作調用消息介面API;

 

資料庫

1) 使用一個消息資料庫;

2) 資料庫表分為簡訊模塊、站內信模塊、IM模塊(暫不做)、通知信息配置模塊;


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 無法嵌入互操作類型“Microsoft.Office.Interop.Word.ApplicationClass”。請改用適用的介面。 ...
  • 目前的問題V5.7沒有完成的需求是不是應該包含在V5.7.2中?V5.7.2發版的時候也會帶上V5.7還沒有發版但是已經開發完成的需求,怎麼區分哪些是V5.7已經發版的需求,哪些是沒有發版但是已經開發完成的需求?需求開發完成並且測試完畢後,產品經理如何發現待驗證的需求?需求的管理和追蹤流程狀態欄位+... ...
  • 系統環境操作系統:CentOS 6.9redis版本:redis-4.0.2安裝步驟1,安裝預環境運行以下命令安裝預環境。[root@redis02 redis-4.0.2]# yum -y install gcc make2,下載redis源代碼文件並解壓縮下載完redis源代碼後,運行以下命令進... ...
  • 這節課主要是學習關於Bootstrap樣式的應用以及對上節做的UI界面進行改造,下邊總結一下所學到的知識點! 一、關於Bootstrap樣式的介紹 Bootstrap,來自Twitter,是目前很受歡迎的前端框架。Bootstrap 是基於 HTML、CSS、JavaScript 的,它簡潔靈活,使 ...
  • 前面的文章中為My Blog加入了文章的管理功能(ASP.NET沒有魔法——ASP.NET MVC使用Area開發一個管理模塊),但是管理功能應該只能由“作者”來訪問,那麼要如何控制用戶的訪問許可權?也就是當用戶訪問管理功能時需要對用戶進行身份驗證,對於用戶來說身份驗證也就是登錄,即提供一個登錄界面, ...
  • 準備一下,近段時間,需要把Excel的數據導入資料庫中。引用命名空間: 你可以寫一個方法,是去讀取Excel文檔的方法,返回DataSet數據集: private DataSet ImportExcelToDataSet(string virtualPath, string sqlQueryStat ...
  • 上下文 記的學英語的時候,總是不記的某個詞是什麼意思,然後就看不下去了,只能問周圍的同學或者老師或者去查詞典,他們的建議是通過上下文去推測這個詞大概的意思,反正我那會上學時沒理解,所以英文一直比較差。 現在英語水平也沒提高多少,儘管有點領會。 後來慢慢理解了一些,因為有些詞有很多種意思,放在某個場景 ...
  • 一般而言,工廠模式分為3種,簡單工廠模式,工廠方法模式,抽象工廠模式。這三種工廠模式逐層深入吧。 一,從springWeb.jar包使用抽象工廠模式的一個例子聊起 之前對spring各種痴迷,所以在需要發送http請求時,用了spring自帶的http客戶端,上代碼: 上UML圖,首先是工廠類: 產 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...