ActiveMQ 五 (實戰一 設計思路)


   ActiveMQ的設計

MQ消息服務產品功能(新版)

一.背景

消息中間件對目前大中型互聯網來說是非常重要的,在業務數據流動中僅次於RPC服務調用,擔負着越來越複雜的網站業務從主流程上解耦和減壓的重要責任。

目前,MQ在走秀網中廣泛用於如下生產系統:商品中心、促銷中心、渠道中心、CMS、搜索引擎、秀團。不像Web2.0網站,這些網站對消息的可靠性要求不是很高,走秀網電商的特點,它是一個在線交易系統,對商品、價格、庫存、促銷相關信息的發送和中轉,使得MQ作爲消息中間件,對消息的可靠性要求非常高,因此新的版本MQ設計和使用MQ必須遵循可靠性優先的設計原則。

 

二.功能特色

新版的基於ActiveMq的異步消息服務系統有如下特點:

1) 高可靠 基於事務、消息持久化的消息發送和存儲,以及提供本地消息存儲提供更高的可靠性

2) 高性能  異步消息發送可到7000-10000條/秒

3) 動態線性擴展 增加服務器可動態橫向擴容

4) 統一配置管理   通過spring相關配置文件,減少代碼量

5 ) 簡單易用 只需實現幾個API接口 見本文第七部分-編程接口

6)管理和監控

Ø  線性擴展服務器,應對系統規模發展

Ø  提供故障處理模式,更快處理故障

Ø  數據監控界面,輕鬆知道性能瓶頸

Ø  服務器端驗證隊列屬性,更少錯誤發生

 

二.設計思路

Ø  支持客戶端存儲,提高系統可靠性。發送端和接受端通過嵌入式數據庫Berkeley DB提供本地存儲。

Ø  實現連接池功能,提供消息數據源,簡化應用使用和配置難度。

Ø  封裝MQ接口,實現MQ系統對應用透明,以便支持多種MQ服務器,甚至實現不同服務器混合部署,目前已經實現對ActiveMQ 的支持。

Ø  支持客戶端Cluster支持以便取代效率不高的MQ系統的負載均衡。

Ø  支持1 .. N,N .. 1,N .. N多種客戶端對服務器的配置。

Ø  支持協議轉換和消息過濾。

 

   四. 總體架構


五.功能模塊:

 

系統流程

 

 

功能層次

六.集羣

更好的可靠性、可伸縮性和可擴展性。新的版本中實現動態擴容增加系統規模和容量。

1.單個集羣

2.橫向擴展


向集羣中添加機器,橫向擴展集羣容量

七.編程接口

 

Connector

現有MQ系統以Queue爲單位抽象,每個Queue都要配置serverAddress,userName,password,連接數量等信息,每個客戶端都會配置連接池,配置複雜,連接重用效率低,加重服務器負載。本次設計借鑑數據庫概念,爲每組服務器配置一個數據源,每個Queue看成是數據源中的一個數據實體,類似於數據庫中表的概念,這樣應用只要兩個信息:數據源和Queue就可以配置一個Sender或者Reciever,簡化了開發人員對消息系統的理解,同時也因爲和數據庫配置類似,有利於降低學習曲線。

JmsSource接口說明:

說明:接口很簡單,只要使用getConnection()方法,就可以得到一個連接,但是需要注意的是,使用連接後必須釋放,否則會到致連接池耗盡。

 

Sender

JmsSender代表一個消息發送端,由一個JmsSource和一個queue唯一對應。接口說明如下:


接口說明:接口很簡單,只需要調用send(obj)方法就可以發送消息到對應的隊列中,對象必須實現Serializable接口。

 

Reciever

JmsReciever代表一個消息接受端,接受服務器push過來的消息,所以還需要實現一個JmsWorker接口,提供業務處理邏輯,義務功能。



 

接口說明:JmsReciever接口與JmsSender接口有所不同,因爲接收端是被動的接受,所以必須明確調用start()方法,告訴服務器已經準備好了,可以接受消息,在特殊情況下也可以調用stop()暫停消息接受。另外,還需要提供一個JmsWorker對象作爲JmsReciever處理消息的工具。

JmsWorker接口只要一個方法,processMessage(Serializable msg),應用需要在這個接口實現自己的義務規則來處理消息,如果處理成功返回True,否則爲False。

Extension

擴展部分包括JmsFilter和JmsTransformer,分別處理消息過濾和消息協議轉換。

接口說明:

 





發佈了41 篇原創文章 · 獲贊 4 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章