一、ActiveMq傳輸協定
官網位址:http://activemq.apache.org/configuring-version-5-transports.html
1、Tcp協定
activemq預設的傳輸協定是tcp,在activemq.xml的配置檔案中,如下
支援以下協定
<transportConnectors>
<!-- DOS protection, limit concurrent connections to 1000 and frame size to 100MB -->
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="mqtt" uri="mqtt://0.0.0.0:1883?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="ws" uri="ws://0.0.0.0:61614?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
2、TCP協定
(1):這是預設的Broker配置,TCP的Client監聽端口是61616。
(2):在網絡傳輸資料前,必須要序列化資料,消息是通過一個叫wire protocol的來序列化成位元組流。預設情況下,ActiveMQ把wire protocol叫做OpenWire,它的目的是促使網絡上的效率和資料快速互動。
(3):TCP連接配接的URI形式:tcp://hostname:port?key=value&key=value
(4):TCP傳輸的優點
- TCP協定傳輸可靠性高,穩定性強
- 高效性:位元組流方式傳遞,效率很高
- 有效性、可用性:應用廣泛,支援任何平台
3、NIO協定
(1):NIO協定和TCP協定類似,但NIO更側重于底層的通路操作。它允許開發人員對同一資源有更多的client調用和服務端有更多的負載。
(2):适合使用NIO協定的場景:
- 可能有大量的Client去連結到Broker上,一般情況下,大量的Client去連結Broker是被作業系統的線程數所限制的。是以,NIO的實作比TCP需要更少的線程去運作,是以建議使用NIO協定
- 可能對于Broker有一個很遲鈍的網絡傳輸NIO比TCP提供更好的性能
(3):Transport Connector配置示例:
<transportConnector name="nio" uri="nio://0.0.0.0:61616?trace=true"/>
4、NIO協定增強
(1)、上述配置就uri以nio開頭,表示這個端口使用以tcp協定為基礎的nio網絡io模型,但是這樣的設定方式,隻能使這個端口支援openwire協定
(2)、設定該端口即支援openwire協定,又支援其他協定
<transportConnector name="auto" uri="auto://localhost:5671"/>
需注意,此關鍵字
auto
在5.13以後的版本中才有

二、ActiveMq消息持久化方式
官網:http://activemq.apache.org/persistence
部落格:https://blog.csdn.net/qq_36761831/article/details/99841388
ActiveMq消息持久化機制方式:JDBC、KahaDB、AMQ、LevelDB、Replicated LevelDB
1、KahaDB:
(1)、基于日志檔案的持久性資料庫,是自ActiveMQ5.4以來的預設存儲機制,可用于任何場景,提高了性能和恢複能力,它是基于檔案的本地資料庫存儲形式。它已針對快速持久性進行了優化。KahaDB使用較少的檔案描述符,并提供比其前身AMQ消息存儲更快的恢複。
<persistenceAdapter>
<kahaDB directory="${activemq.data}/kahadb"/>
</persistenceAdapter>
(2)、Kahadb目錄:
db-7.log 主要用來存資料
db.data 包含了持久化的BTree索引,是消息的索引檔案
db.redo 用來進行消息恢複
lock 檔案表示目前獲得Kahadb讀寫權限的broker
2、JDBC持久化
(1)、配置
<bean id="activemq-db" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
<property name="maxActive" value="200"/>
<property name="poolPreparedStatements" value="true"/>
</bean>
<persistenceAdapter>
<jdbcPersistenceAdapter dataSource="#activemq-db" createTablesOnStartup="true" />
</persistenceAdapter>
(2)、添加mysql資料庫的驅動jar包到activemq/lib的檔案夾下
注意:若使用第三方連接配接池或是連接配接器(例如c3p0、druid),應同時将其jar包添加到lib檔案夾下
(3)、自動建立的三張表
***activemq_msgs:***用于存儲消息,Queue和Topic都存儲在這個表中
***activemq_acks:***用于存儲訂閱關系,如果是持久化的Topic,訂閱者和伺服器的訂閱關系在這個表儲存
***activemq_lock:***在叢集環境中才有用,隻有一個Broker可以獲得消息,用來記錄哪個Broker是目前的Master Broker
3、AMQ()
AMQ是一種檔案存儲形式,它具有寫入速度快和容易恢複的特定,消息存儲在一個個檔案中,檔案的預設大小為32M,當一個存儲檔案中的消息已經全部被消費,那麼這個檔案将被辨別為可删除,在下一個清除階段這個檔案被删除,AMQ适用于ActiveMQ5.3之前的版本。
4、LevelDB(适用ActiveMq5.8及以上版本)
它和KahaDB很相似,也是基于檔案的本地資料庫存儲形式,但是它提供比KahaDB更快的持久性,但它不再使用自定義B-Tree實作來索引預寫日志,而是使用基于LevelDB的索引
從ActiveMq5.9 ,LevelDB已經被棄用,不再被推薦使用