使用日志MySQL JDBC持久性设置ActiveMQ

使用日志MySQL JDBC持久性设置ActiveMQ,mysql,persistence,activemq,Mysql,Persistence,Activemq,我正在运行ActiveMQ 5.5.1,在配置日志JDBC持久性时遇到问题。使用,我得到以下XML验证错误: ./activemq console xbean:my-activemq.xml Java Runtime: Sun Microsystems Inc. 1.6.0_29 /home/aj/jdk1.6.0_29/jre Heap sizes: current=253440k free=250641k max=253440k JVM args: -Xms256M -Xm

我正在运行ActiveMQ 5.5.1,在配置日志JDBC持久性时遇到问题。使用,我得到以下XML验证错误:

./activemq console xbean:my-activemq.xml

Java Runtime: Sun Microsystems Inc. 1.6.0_29 /home/aj/jdk1.6.0_29/jre
  Heap sizes: current=253440k  free=250641k  max=253440k
    JVM args: -Xms256M -Xmx256M -Dorg.apache.activemq.UseDedicatedTaskRunner=true -Djava.util.logging.config.file=logging.properties -Dcom.sun.management.jmxremote -Dactivemq.classpath=/home/aj/apache-activemq-5.5.1/conf; -Dactivemq.home=/home/aj/apache-activemq-5.5.1 -Dactivemq.base=/home/aj/apache-activemq-5.5.1
ACTIVEMQ_HOME: /home/aj/apache-activemq-5.5.1
ACTIVEMQ_BASE: /home/aj/apache-activemq-5.5.1
Loading message broker from: xbean:my-activemq.xml

INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@13f3045: startup date [Thu Dec 22 07:49:17 EST 2011]; root of context hierarchy
ERROR: java.lang.RuntimeException: Failed to execute start task.
Reason: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'org.apache.activemq.xbean.XBeanBrokerService#0' defined in class path resource [my-activemq.xml]:
Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException:
Failed to convert property value of type 
'org.apache.activemq.store.journal.JournalPersistenceAdapter' to required type 
'org.apache.activemq.store.PersistenceAdapterFactory' for property 'persistenceFactory'; 
nested exception is java.lang.IllegalStateException: Cannot convert value of type 
[org.apache.activemq.store.journal.JournalPersistenceAdapter] to required type 
[org.apache.activemq.store.PersistenceAdapterFactory] for property 'persistenceFactory': no matching editors or conversion strategy found
我已经复习过了,但它似乎与这个例子完全不同,所以很明显这两个来源中有一个是不同步的。任何人都可以使用带日志的JDBC和MySQL共享他们的工作持久性配置吗

以下是我的配置的相关部分:

<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/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>

  <persistenceFactory>
    <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.base}/activemq-data" dataSource="#mysql-ds"/>
  </persistenceFactory>
<persistenceFactory>
    <journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${activemq.base}/data" dataSource="#mysql-ds">
    </journalPersistenceAdapterFactory>
</persistenceFactory>

您可以尝试使用以下配置设置持久性适配器:

<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/activemq?relaxAutoCommit=true"/>
    <property name="username" value="activemq"/>
    <property name="password" value="activemq"/>
    <property name="maxActive" value="200"/>
    <property name="poolPreparedStatements" value="true"/>
</bean>

  <persistenceFactory>
    <journaledJDBC journalLogFiles="5" dataDirectory="${activemq.base}/activemq-data" dataSource="#mysql-ds"/>
  </persistenceFactory>
<persistenceFactory>
    <journalPersistenceAdapterFactory journalLogFiles="5" dataDirectory="${activemq.base}/data" dataSource="#mysql-ds">
    </journalPersistenceAdapterFactory>
</persistenceFactory>


这对我来说是可行的,但是如果您计划使用故障转移,请注意日志的缺点——它们根本不能一起工作(在从属代理上没有日志的副本)。经过考虑,我们决定使用sql server持久性而不使用日志记录,它对于发布者和订阅者的故障切换都非常有效。

谢谢,我将尝试一下。故障转移无疑是一个问题,但在AMQ站点上阅读这篇文章时,听起来JDBC w/out日志记录要慢得多。你的交通状况如何:稳定还是间歇?您的峰值和平均流量是多少?我们的系统尚未投入生产,但我们不希望收到大量消息。在峰值时,我们预计每秒有1000条消息,而我们的性能测试甚至没有记录到40%的cpu负载。对我们来说,最重要的是可靠性,并保证在需要时发送/接收消息,而不丢失信息,这是不可容忍的。我想这完全是一个观点问题。对我来说,1000/秒是相当可观的。然而,如果这不是一个持续的容量,那么我会对你期望的平均值感兴趣?很难说,生产将向我们展示:)我会说,在正常运行中,我们的速度将低于100/秒。关于你的体系结构,还有几个问题,如果您不介意的话……您是在数据库级别还是在代理级别进行复制?此外,您的db服务器是否与代理运行在同一硬件上?最后……主设备和从设备之间的延迟/距离是多少?