2011-12-22 2 views
2

ActiveMQ 5.5.1을 실행 중이고 저널링 된 JDBC 지속성을 구성하는 데 문제가 있습니다. 그래서 명확하게 두 개의 소스 중 하나는 동기화되지, 내가 the published schema를 검토 한저널링 된 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 example here를 사용하여, 나는 다음과 같은 XML 유효성 검사 오류가 발생합니다. 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 Server 지속성을 사용하기로 결정 했으므로 게시자와 구독자의 장애 조치 (failover)에 문제가 없습니다.

+0

감사합니다. 시도해보십시오. 페일 오버는 확실히 걱정이지만, AMQ 사이트에서이 문제에 관해 읽으면서, JDBC w/out 저널링이 훨씬 느린 것 같습니다. 당신의 트래픽은 무엇입니까 : 꾸준하거나 간헐적입니까? 최대 및 평균 볼륨은 무엇입니까? –

+0

Google 시스템은 아직 생산 중이 아니지만 대량의 메시지는 기대하지 않습니다. 피크에서 우리는 1000 개의 메시지/초를 예상하고 우리의 성능 테스트는 그러한 트래픽으로 40 %의 CPU 부하를 등록하지 않았습니다. 우리에게있어 가장 중요한 것은 메시지 신뢰성/정보 손실없이 메시지를주고받을 수 있다는 것입니다. – Paul

+0

나는 그것이 모든 관점의 문제라고 생각한다. 나에게 1000/초는 꽤 상당하다. 그러나 그것이 지속적인 볼륨이 아니라면, 나는 당신이 당신의 평균이 될 것으로 기대하는 것에 흥미가있을 것입니까? –