activemq JDBC存儲,使用mysql持久化

持久化存儲支持類型

  • KahaDB存儲(默認存儲方式)
  • JDBC存儲 Memory存儲
  • LevelDB存儲
  • JDBC With ActiveMQ Journal

正常情況下,非持久化消息是存儲在內存中的,持久化消息是存儲在文件中的。能夠存儲的最大消息數據在
${ActiveMQ_HOME}/conf/activemq.xml文件中的systemUsage節點
SystemUsage配置設置了一些系統內存和硬盤容量

activemq.xml

<systemUsage>
<systemUsage>
    <memoryUsage>
        <memoryUsage percentOfJvmHeap="70" />
    </memoryUsage>
    <storeUsage>
        <storeUsage limit="100 gb"/>
    </storeUsage>
    <tempUsage>
        <tempUsage limit="50 gb"/>
    </tempUsage>
</systemUsage>
</systemUsage>

mysql持久化

第一步:註釋調kahadb,添加mysql配置

<persistenceAdapter>
    <!-- <kahaDB directory="${activemq.data}/kahadb"/> -->
    <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" />
</persistenceAdapter>

第二步:添加mysql數據源配置的bean

<bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
	<property name="url" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>
	<property name="username" value="root"/>
	<property name="password" value="root"/>
</bean>

第三步:在activemq更目錄的\lib目錄下添加以下3個jar包

數據庫連接池:commons-dbcp-1.4.jar、commons-pool-1.6.jar

mysql JDBC驅動包:mysql-connector-java-5.1.35.jar

 

第四步:新建數據庫activemq並重啓activemq

重啓後會自動創建3個表:

activemq_msgs 消息表,queue和topic都存在這個表中
activemq_acks 存儲持久訂閱的信息和最後一個持久訂閱接收的消息ID
activemq_locks 鎖表,用來確保某一時刻,只能有一個ActiveMQ broker實例來訪問數據庫

之後發送一個持久化消息不消費掉可以看到數據庫表中有數據了

 

JDBC Message store with ActiveMQ Journal

ActiveMQ Journal,使用高速緩存寫入技術,大大提高了性能

journal文件能夠大大減少需要寫入到DB中的消息

如果消費者的消費速度很慢,這個時候journal文件可以使消息以批量方式寫到DB

配置好mysql後把persistenceAdapter註釋掉添加persistenceFactory即可使用Journal

<!--
<persistenceAdapter>
    <kahaDB directory="${activemq.data}/kahadb"/>
    <jdbcPersistenceAdapter dataSource="#mysql-ds" createTablesOnStartup="true" />
</persistenceAdapter>
-->
<persistenceFactory>
	<journalPersistenceAdapterFactory dataSource="#mysql-ds" dataDirectory="activemq-data"/>
</persistenceFactory>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章