2011-12-22 59 views
2

我正在运行ActiveMQ 5.5.1,并且遇到日记获取记录的JDBC持久性配置。使用the example here,我得到下面的XML验证错误:使用Journaled MySQL JDBC持久性设置ActiveMQ

./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 [email protected]: 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 

我查看了the published schema,但它似乎比这个例子完全不同,因此显然是两个来源之一是不同步的。任何人都可以使用带有MySQL的Journaled JDBC来共享他们的工作持久性配置吗?

这里是我的配置的相关章节:

<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> 

回答

4

你可以尝试用下面的配置设置你的持久适配器:

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

它为我工作,但要注意有关的缺点如果您计划使用故障转移,则它们不会一起工作(从属代理上没有您的日记副本)。经过考虑,我们决定使用没有日志记录的sql服务器持久性,它对发布者和订阅者的故障转移都很好。

+0

谢谢,会试试这个。故障转移绝对是一个问题,但在AMQ网站上阅读这篇文章时,听起来像JDBC w/out日志记录要慢得多。你的流量是什么样的:稳定还是间歇?您的峰值和平均值是多少? – 2011-12-22 16:49:53

+0

我们的系统尚未投入生产,但我们并不期待大量的信息。在峰值期间,我们预计会有1000条消息/秒,而我们的性能测试甚至没有注册这种流量的40%cpu负载。对我们来说,最重要的是可靠性,并保证在需要时发送/接收消息 - 而不会丢失信息,这是不能容忍的。 – Paul 2011-12-22 17:21:13

+0

我想这都是一个观点问题。对我而言,1000 /秒是非常可观的。但是,如果它不是一个持续的数量,那么我会对你期望的平均水平感兴趣吗? – 2011-12-22 17:32:09