閱讀760 返回首頁    go 技術社區[雲棲]


流行消息隊列服務


一、簡單消息隊列服務 HTTPSQS

HTTPSQS(HTTP Simple Queue Service)是一款基於 HTTP GET/POST 協議的輕量級開源簡單消息隊列服務,使用 Tokyo Cabinet 的 B+Tree Key/Value 數據庫來做數據的持久化存儲。

隊列(Queue)又稱先進先出表(First In First Out),即先進入隊列的元素,先從隊列中取出。加入元素的一頭叫“隊頭”,取出元素的一頭叫“隊尾”。利用消息隊列可以很好地異步處理數據傳送和存儲, 當你頻繁地向數據庫中插入數據、頻繁地向搜索引擎提交數據,就可采取消息隊列來異步插入。另外,還可以將較慢的處理邏輯、有並發數量限製的處理邏輯,通過 消息隊列放在後台處理,例如FLV視頻轉換、發送手機短信、發送電子郵件等。

1、HTTPSQS 具有以下特征:

● 非常簡單,基於 HTTP GET/POST 協議。PHP、Java、Perl、Shell、Python、Ruby等支持HTTP協議的編程語言均可調用。
● 非常快速,入隊列、出隊列速度超過10000次/秒。
● 高並發,支持上萬的並發連接,C10K不成問題。
● 支持多隊列。
● 單個隊列支持的最大隊列數量高達10億條。
● 低內存消耗,海量數據存儲,存儲幾十GB的數據隻需不到100MB的物理內存緩衝區。
● 可以在不停止服務的情況下便捷地修改單個隊列的最大隊列數量。
● 可以實時查看隊列狀態(入隊列位置、出隊列位置、未讀隊列數量、最大隊列數量)。
● 可以查看指定隊列ID(隊列點)的內容,包括未出、已出的隊列內容。
● 查看隊列內容時,支持多字符集編碼。
● 源代碼不超過700行,適合二次開發。

簡單消息隊列服務 HTTPSQS


以上來自百度百科。


二、ActiveMQ

ActiveMQ:是Apache出品,最流行的,能力強勁的開源消息總線。是一個完全支持JMS1.1和J2EE 1.4規範的 JMS Provider實現。

JMS(Java消息服務):是一個Java平台中關於麵向消息中間件(MOM)的API,用於在兩個應用程序之間,或分布式係統中發送消息,進行異步通信。

2. JMS消息模式

1) 點對點或隊列模式

每個消息隻能有一個消費者。消息的生產者和消費者之間沒有時間上的相關性,無論消費者在生產者發送消息的時候是否處於運行狀態,它都可以提取消息。

ActiveMQ學習筆記

2) Pub/Sub 發布/訂閱模式

每個消息可以有多個消費者。生產者和消費者之間有時間上的相關性。訂閱一個主題的消費者隻能消費自它訂閱之後發布的消息。

3. Broker節點

代表一個運行MQ的節點。

4. Transport傳輸方式

ActiveMQ目前支持的Transport:VM Transport、TCP Transport、NIO Transport、SSL Transport、Peer Transport、UDP Transport、Multicast Transport、HTTP and HTTPS Transport、WebSockets Transport、Failover Transport、Fanout Transport、Discovery Transport、ZeroConf Transport等。

1) VM Transport:允許客戶端和Broker直接在VM內部通信,采用的連接不是Socket連接,而是直接的方法調用,從而避免了網絡傳輸的開銷。應用場景也僅限於Broker和客戶端在同一JVM環境下。

2) TCP Transport:客戶端通過TCP Socket連接到遠程Broker。配置語法:

tcp://hostname:port?transportOptions

3) HTTP and HTTPS Transport:允許客戶端使用REST或者Ajax的方式進行連接。這意味著可以直接使用Javascript向ActiveMQ發送消息。

4) WebSockets Transport:允許客戶端通過HTML5標準的WebSockets方式連接到Broker。

5) Failover Transport:青龍係統MQ采用的就是這種連接方式。這種方式具備自動重新連接的機製,工作在其他Transport的上層,用於建立可靠的傳輸。允許配置任意多個的URI,該機製將會自動選擇其中的一個URI來嚐試連接。配置語法:

failover:(tcp://localhost:61616,tcp://localhost:61617,.....)?transportOptions

6) Fanout Transport:主要適用於生產消息發向多個代理。如果多個代理出現環路,可能造成消費者接收重複的消息。所以,使用該協議時,最好將消息發送給多個不相連接的代理。

5. Persistence持久化存儲

1) AMQ Message Store

ActiveMQ 5.0 的缺省持久化存儲方式。

2) Kaha Persistence

這是一個專門針對消息持久化的解決方案。它對典型的消息使用模式進行了優化。

3) JDBC Persistence

目前支持的數據庫有:Apache Derby, Axion, DB2, HSQL, Informix, MaxDB, MySQL, Oracle, Postgresql, SQLServer, Sybase。

4) Disable Persistence

不應用持久化存儲。

6. 集群方案

1. Master / Slave

1.1. Pure Master Slave

無單點故障;

不需要依賴共享文件係統或是共享數據庫,使用 KahaDB的方式持久化存儲;

一個Master隻能帶一個Slave;

Master工作期間,會將消息狀況自動同步到Slave

Master一旦崩潰,Slave自動接替其工作,已發送並尚未消費的消息繼續有效;

Slave接手後,必須停止Slave才能重啟先前的Master;

1.2. Shared File System Master Slave

1.3. JDBC Master Slave

配置上,不存在Master和Slave的區分,多個共享數據源的Broker構成JDBC Master Slave;

首先搶到資源(數據庫鎖)的Broker成為Master,其他Broker定期嚐試搶占資源;

一旦Master崩潰,其他Broker搶占資源,最終隻有一台搶到,立刻成為Master,之前的Master即便重啟成功,也隻能作為Slave等待;

7. 延伸鏈接

1. ActiveMQ https://activemq.apache.org/

2. Metamorphosis (MetaQ) https://metaq.taobao.org/

淘寶開源分布式消息中間件,在淘寶和支付寶有著廣泛應用。

3. DotNetMQ

基於C#和.NET框架的開源消息隊列係統。

4. JBoss Messaging https://www.jboss.org/jbossmessaging/


最後更新:2017-04-02 16:47:59

  上一篇:go oracle中對時間的操作以及to_char和to_date用法總結
  下一篇:go 模仿QQ好友列表的ExpandableListView實現的效