ActiveMQ 消息持久化到數據庫(Mysql、SQL Server、Oracle、DB2等)


ActiveMQ具體就不介紹了,直接介紹如何講ActiveMQ持久化到本地數據庫,以SQL Server 2008 R2為例
1.下載ActiveMQ后直接解壓,我下載的是apache-activemq-5.14.5-bin.zip。

2.打開conf下的activemq.xml,我要配置的是將消息持久化到SQL Server 2008 R2

3.增加配置:

 1 Mysql持久化bean:  2 
 3 <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 4   <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
 5   <property name="url" value="jdbc:mysql://localhost/activemq?relaxAutoCommit=true"/>
 6   <property name="username" value="activemq"/>
 7   <property name="password" value="activemq"/>
 8   <property name="poolPreparedStatements" value="true"/>
 9 </bean>
10 
11 SQL Server持久化bean: 12 
13 <bean id="mssql-ds" class="net.sourceforge.jtds.jdbcx.JtdsDataSource" destroy-method="close">
14   <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
15   <property name="url" value="jdbc:sqlserver://xx.xxx.x.xxx:1433;databaseName=DATANAME;user=USER;password=PASSWORD"/>
17   <property name="user" value="USER"/>
18   <property name="password" value="PASSWORD"/>
19 </bean>
20 
21 Oracle持久化bean: 22 
23 <bean id="oracle-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
24    <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
25    <property name="url" value="jdbc:oracle:thin:@10.53.132.47:1521:activemq"/>
26    <propertyname="username" value="activemq"/>
27    <property name="password" value="activemq"/>
28    <property name="maxActive" value="200"/>
29    <property name="poolPreparedStatements" value="true"/>
30 </bean>
31 
32 DB2持久化bean: 33 
34 <bean id="db2-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
35    <property name="driverClassName" value="com.ibm.db2.jcc.DB2Driver"/>
36    <property name="url" value="jdbc:db2://hndb02.bf.ctc.com:50002/activemq"/>
37    <property name="username" value="activemq"/>
38    <property name="password" value="activemq"/>
39    <property name="maxActive" value="200"/>
40    <property name="poolPreparedStatements" value="true"/>
41 </bean>

  如圖所示:配置MSSQL數據庫

 

根據自己的服務器設定相關的信息。

4.修改持久化設置:

1 <persistenceAdapter> 
2   <jdbcPersistenceAdapter dataSource="#mssql-ds" createTablesOnStartup="true"/>
3 </persistenceAdapter>

如圖所示:配置jdbcPersistenceAdpater

 

5.最后,別忘了將MSSQL Server JDBC驅動sqljdbc4-4.0.jar(可以到微軟官網下載https://msdn.microsoft.com/zh-cn/library/mt683464.aspx)拷貝到lib目錄下,
好了,運行bin下的activemq.bat。
在數據庫中已建立好ActiveMQ持久化需要的數據表。如圖所示:如果配置成功,默認會創建三張表:

activemq_acks:ActiveMQ的簽收信息。
activemq_lock:ActiveMQ的鎖信息。
activemq_msgs:ActiveMQ的消息的信息

6.當表已成功創建,再次修改持久化設置中的創建表設置(只要第一次創建表成功就行了):
createTablesOnStartup="false"

7.管理登錄:
http://localhost:8161默認用戶和密碼均為admin

OK配置完成!

PS:如果你發現ActiveMQ添加了持久化后,發了消息,為什么activemq_msgs表中沒有記錄任何數據,其實這個是需要我們自己在代碼里控制的,需要設置MsgDeliveMode為Persistent,具體代碼如下:

1 //PERSISTENT:保存到磁盤,consumer消費之后,message被刪除。
2 //NON_PERSISTENT:保存到內存,消費之后message被清除。
3 //注意:堆積的消息太多可能導致內存溢出。
4 producer.Send(msg,MsgDeliveryMode.Persistent,level,TimeSpan.MinValue);

 

PS:如有疑問,請留言,未經允許,不得私自轉載,轉載請注明出處:https://www.cnblogs.com/xuliangxing/p/6866892.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM