1. 隊列存儲
采取先進先出模式,同一時間,消息只會發送給某一個消費者,只有當該消息被消費並告知已收到時,它才能在代理的存儲中被刪除。
對於持久性訂閱來說,每一個消費者都會獲取消息的拷貝。為了節約空間,代理的存儲介質中只存儲了一份消息,存儲介質的持久訂閱對象為其以后的被存儲的消息維護了一個指針,消費者消費時,從存儲介質中復制一個消息。消息被所有訂閱者獲取后才能刪除。
2. KahaDB消息存儲
從ActiveMQ5.3后,推薦使用KahaDB存儲普通用途的消息。KahaDB是一種基於文件的消息存儲機制,為了提高消息存儲的可靠性和可恢復性,它整合了一個事務日志。KahaDB擁有高性能和可擴展性等特點。由於KahaDB使用的是基於文件的存儲,所以不需要使用第三方數據庫。
KahaDB消息存儲機制為所有目的地使用一個索引,其索引使用一個事務日志。
KahaDB被使用在10000個活動連接的產品環境,每個連接都擁有一個分割的隊列。
KahaDB可以通過配置或硬代碼實現,以下是配置方式:

以下是硬代碼方式:

KahaDB存儲方式是所有存儲方式中最快捷的一個。
下表是KahaDB的配置選項:

3. AMQ消息存儲
AMQ消息存儲與KahaDB消息存儲類似,由一個提供可靠持續性的事務日志以及高效索引組成,當一個應用中,消息吞吐量是主要需求時,AMQ是最好的選擇。但由於它為每個索引使用了兩個分隔文件,而每個目的地都有一個索引,所以它不能被使用於每個代理擁有成百上千個隊列的情況。ActiveMQ代理沒有被完全關閉時,索引的覆蓋也會很慢。這是因為所有的索引都需要被重建。
AMQ消息存儲的配置如下所示:

下表是AMQ存儲的配置選項:

4. JDBC消息存儲
配置方式:

5. 內存消息存儲
配置方式:

或者:
