ActiveMQ使用MySQL進行消息持久化

 使用MySQL進行ActiveMQ的消息持久化,並設置主從模式

1、MySQL數據庫的binlog日誌模式要設置爲 mixed 模式

2、設置使用數據庫鎖 useDatabaseLock="true" ,如果不設置,在主從模式下會報主鍵重複的異常。

  1. <persistenceAdapter> 
  2.    <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" useDatabaseLock="true"  
  3. lockKeepAlivePeriod="10000"/> 
  4. </persistenceAdapter> 

3、使用數據庫鎖的時候,master啓動後,slave由於數據庫鎖的原因,啓動時處於等待狀態,這時slave無法提供服務,當master當機後,數據庫鎖釋放,slave獲得數據庫鎖,可以提供服務。

4、雖然設置的主從模式,但當master當機時,接收者會有數據丟失問題,而且問題比較嚴重。考慮可能是由於沒有 Journal 的原因,但不知道爲什麼ActiveMQ 5.0以後版本不支持 journaledJDBC ,也可能是沒有找到正確的設置方法。(原因是在消息發送端設置了異步發送,導致發送和接收的消息數不一致,修改爲同步發送後,消息不丟失,發送和接收的消息數一致

ActiveMQ使用MySQL進行持久化,並配置Master-Slave模式配置樣例:

Master:

  1. <beans 
  2.   xmlns="http://www.springframework.org/schema/beans" 
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
  5.   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> 
  6.  
  7.   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  8.       <property name="locations"> 
  9.           <value>file:${activemq.conf}/credentials.properties</value> 
  10.       </property> 
  11.   </bean> 
  12.  
  13.   <broker brokerName="broker-1-1" persistent="true" xmlns="http://activemq.apache.org/schema/core"> 
  14.  
  15.     <transportConnectors> 
  16.        <transportConnector name="default" uri="tcp://0.0.0.0:61616"/> 
  17.     </transportConnectors> 
  18.  
  19.     <persistenceAdapter> 
  20.        <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" useDatabaseLock="true"  
  21.        lockKeepAlivePeriod="10000"/> 
  22.     </persistenceAdapter> 
  23.      
  24.     <systemUsage> 
  25.         <systemUsage sendFailIfNoSpaceAfterTimeout="3000"> 
  26.             <memoryUsage> 
  27.                 <memoryUsage limit="20 mb"/> 
  28.             </memoryUsage> 
  29.             <storeUsage> 
  30.                 <storeUsage limit="100 mb"/> 
  31.             </storeUsage> 
  32.             <tempUsage> 
  33.                 <tempUsage limit="50 mb"/> 
  34.             </tempUsage> 
  35.         </systemUsage> 
  36.     </systemUsage> 
  37.  
  38.     <shutdownHooks> 
  39.         <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> 
  40.     </shutdownHooks> 
  41.      
  42.   </broker> 
  43.  
  44.   <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
  45.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
  46.     <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> 
  47.     <property name="username" value="root"/> 
  48.     <property name="password" value="neusoft"/> 
  49.     <property name="maxActive" value="200"/> 
  50.     <property name="poolPreparedStatements" value="true"/> 
  51.   </bean> 
  52.  
  53.   <import resource="jetty.xml"/> 
  54. </beans> 

 

Slave:

  1. <beans 
  2.   xmlns="http://www.springframework.org/schema/beans" 
  3.   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  4.   xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
  5.   http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"> 
  6.  
  7.   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
  8.       <property name="locations"> 
  9.           <value>file:${activemq.conf}/credentials.properties</value> 
  10.       </property> 
  11.   </bean> 
  12.  
  13.   <broker brokerName="broker-1-2" persistent="true" 
  14.   masterConnectorURI="tcp://127.0.0.1:61616" shutdownOnMasterFailure="false" xmlns="http://activemq.apache.org/schema/core"> 
  15.     <transportConnectors> 
  16.        <transportConnector name="default" uri="tcp://0.0.0.0:61617"/> 
  17.     </transportConnectors> 
  18.  
  19.     <persistenceAdapter> 
  20.        <jdbcPersistenceAdapter dataDirectory="${activemq.data}" dataSource="#mysql-ds" useDatabaseLock="true"  
  21.        lockKeepAlivePeriod="10000"/> 
  22.     </persistenceAdapter> 
  23.      
  24.     <systemUsage> 
  25.         <systemUsage sendFailIfNoSpaceAfterTimeout="3000"> 
  26.             <memoryUsage> 
  27.                 <memoryUsage limit="20 mb"/> 
  28.             </memoryUsage> 
  29.             <storeUsage> 
  30.                 <storeUsage limit="100 mb"/> 
  31.             </storeUsage> 
  32.             <tempUsage> 
  33.                 <tempUsage limit="50 mb"/> 
  34.             </tempUsage> 
  35.         </systemUsage> 
  36.     </systemUsage> 
  37.  
  38.     <shutdownHooks> 
  39.         <bean xmlns="http://www.springframework.org/schema/beans" class="org.apache.activemq.hooks.SpringContextHook" /> 
  40.     </shutdownHooks> 
  41.      
  42.   </broker> 
  43.  
  44.   <bean id="mysql-ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
  45.     <property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
  46.     <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true&amp;useUnicode=true&amp;characterEncoding=UTF-8"/> 
  47.     <property name="username" value="root"/> 
  48.     <property name="password" value="neusoft"/> 
  49.     <property name="maxActive" value="200"/> 
  50.     <property name="poolPreparedStatements" value="true"/> 
  51.   </bean> 
  52.  
  53.   <import resource="jetty.xml"/> 
  54.  
  55. </beans> 

 

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