本章重點
- ActiveMQ 中,隊列和主題里的消息是怎么存儲的
- ActiveMQ 提供的四種消息存儲形式
- ActiveMQ 是怎么為消費者緩存消息的
- 使用訂閱恢復模式,怎么控制消息緩存
簡介
JMS 規范支持兩種類型的消息分發:持久化和非持久化。持久化分發的消息必須要日志記錄到固定的存儲設備上。對於非持久化分發,JMS 提供者必須盡最大可能的分發消息,但提供者不必日志記錄消息到存儲設備。
ActiveMQ 不僅支持規范中定義的兩種消息分發,並且也可以配置成支持消息恢復,消息緩存在內存中。ActiveMQ 對於消息存儲支持插件策略,提供了存儲消息在內存,文件,以及關系型數據庫的存儲選項。
當你想要消費者可以接收到每個消息,即使消息被發送到代理時消費者並不在線,那么就要使用持久化消息了。一旦消息已經被消費者接收並確認,代理就會從存儲中刪除消息。
非持久化消息一般用於發送通知和實時數據。當性能是重要的且消息並沒有必達的要求,那么你應該使用非持久化消息。
本章將首先解釋為什么隊列和主題中的消息存儲是不同的。然后介紹 ActiveMQ 中四種不同的消息存儲方式,並解釋為什么以及什么時候使用它們。最終,我們將學習怎么配置臨時消息緩存以便消費者可以在以后的某個時間點消費消息。ActiveMQ 提供的消息緩存是靈活的,你的應用可以進行非常方便的恢復控制。
本章將詳細的解釋消息持久化。為了打好基礎,我們先學習 JMS destinations 的消息存儲。
ActiveMQ 是怎么存儲消息的?
理解 ActiveMQ 存儲消息的存儲機制的基本知識是非常重要的。隊列和主題中的消息存儲是不同的,因為有些可以在主題上優化的地方並不適合隊列。
隊列存儲消息是非常直接的——即最基本的先進先出(FIFO)。
主題存儲消息是有點復雜的,它為每一個消費者維持一個指向消息隊列的指針。
KahaDB 消息存儲
自從 5.3 版本之后,ActiveMQ 推薦的消息存儲一般是使用 KahaDB。它是一種基於文件形式的消息存儲,集合了便於恢復的事務日志和良好的性能以及可伸縮性。
AMQ 消息存儲
跟 KahaDB 差不多的東西吧,兩者有啥區別?反正我是沒看明白!
JDBC 消息存儲
就是利用關系型數據庫存儲消息啦!感覺有點怪怪的。。。
內存消息存儲
這個就不是持久化了,就是單純的把消息保存在內存中,配置簡單,使用方便!
為消費者緩存消息
我曹,好難啊!這小節完全沒看懂。。。