欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Activemq持久化消息到MySql数据库中 博客分类: java编程Linux activemqJMS持久化消息activemq持久化消息mysql数据库 

程序员文章站 2024-02-20 22:42:40
...

1.添加MySql数据源

       打开Activemq安装目录下的conf/activemq.xml文件,添加MySql数据源。默认情况下Activemq使用KahaDB存储,注解掉KahaDB配置,改为mysql配置如下:

 

<!--
<persistenceAdapter>
    <kahaDB directory="${activemq.base}/data/kahadb"/>
</persistenceAdapter>
-->
<persistenceAdapter>
   
<jdbcPersistenceAdapter dataSource="#MySQL-DS"/>
</persistenceAdapter>

 

该配置表示,我们将要使用名称为“MySQL-DS”的作为mysql数据源。

2. 配置MySql数据源

      在</broker>节点后面,增加MySQL数据源配置:

 

<!-- MySQL DataSource -->
<bean id="MySQL-DS" class="org.apache.commons.dbcp.BasicDataSource" destroy-ethod="close">
   
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   
<property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true"/>
   
<property name="username" value="用户名"/>
   
<property name="password" value="登录密码"/>
   
<property name="poolPreparedStatements" value="true"/>
</bean>

 

此处配置类似于spring的Bean配置,id 要与上面的保持一致。

 

3. 配置完成后,将mysql驱动包加入到 Activemq 的 lib目录下,启动Activemq。查看activemq数据库会有三张表:activemq_acks  ,activemq_lock  ,activemq_msgs 

数据表activemq_msgs即为持久化消息表;

 

整个activemq持久消息到mysql数据库配置如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:amq="http://activemq.apache.org/schema/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation
="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd"
>

   
<!-- Allows us to use system properties as variables in this configuration file -->
   
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       
<property name="locations">
           
<value>classpath:/META-INF/credentials.properties</value>
       
</property>
   
</bean>

   
<!--
        The <broker> element is used to configure the ActiveMQ broker.
   
-->
   
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost">
       
<!--
            For better performances use VM cursor and small memory limit. For more information, see: http://activemq.apache.org/message-cursors.html Also, if your producer is "hanging", it's probably due to producer flow control. For more information, see:
            http://activemq.apache.org/producer-flow-control.html
       
-->
       
<destinationPolicy>
           
<policyMap>
               
<policyEntries>
                   
<policyEntry topic=">" producerFlowControl="true" memoryLimit="1mb">
                       
<pendingSubscriberPolicy>
                           
<vmCursor />
                       
</pendingSubscriberPolicy>
                   
</policyEntry>
                   
<policyEntry queue=">" producerFlowControl="true" memoryLimit="1mb">
                       
<!--
                            Use VM cursor for better latency For more information, see: http://activemq.apache.org/message-cursors.html <pendingQueuePolicy> <vmQueueCursor/> </pendingQueuePolicy>
                       
-->
                   
</policyEntry>
               
</policyEntries>
           
</policyMap>
       
</destinationPolicy>

       
<!--
            The managementContext is used to configure how ActiveMQ is exposed in
            JMX. By default, ActiveMQ uses the MBean server that is started by
            the JVM. For more information, see:
          
            http://activemq.apache.org/jmx.html
       
-->
       
<managementContext>
           
<managementContext createConnector="false" />
       
</managementContext>

       
<!--
            Configure message persistence for the broker. The default persistence
            mechanism is the KahaDB store (identified by the kahaDB tag).
            For more information, see:
          
            http://activemq.apache.org/persistence.html
       
-->
       
<!--
        <persistenceAdapter>
            <kahaDB directory="${activemq.base}/data/kahadb"/>
        </persistenceAdapter>
       
-->
       
<persistenceAdapter>
           
<jdbcPersistenceAdapter dataSource="#MySQL-DS" />
       
</persistenceAdapter>

       
<!--
            The transport connectors expose ActiveMQ over a given protocol to
            clients and other brokers. For more information, see:
          
            http://activemq.apache.org/configuring-transports.html
       
-->
       
<transportConnectors>
           
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616" />
       
</transportConnectors>
   
</broker>

   
<!-- MySQL DataSource -->
   
<bean id="MySQL-DS" class="org.apache.commons.dbcp.BasicDataSource" destroy-thod="close">
   
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
   
<property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq?relaxAutoCommit=true"/>
   
<property name="username" value="用户名"/>
   
<property name="password" value="登录密码"/>
   
<property name="poolPreparedStatements" value="true"/>
</bean>

   
<!--
        Enable web consoles, REST and Ajax APIs and demos
        It also includes Camel (with its web console), see ${ACTIVEMQ_HOME}/conf/camel.xml for more info
      
        Take a look at ${ACTIVEMQ_HOME}/conf/jetty.xml for more details
   
-->
   
<import resource="jetty.xml"/>

</beans>