2011-12-22 23 views
2

ActiveMQ 5.5.1を実行しており、ジャーナリングされたJDBC永続性が設定されている問題があります。 the example hereを使用して、私は次のXML検証エラーを取得:ジャーナリングされたJDBC 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 

を2つの源の一つが同期していないのではっきりと、私はthe published schemaを確認しましたが、それはこの例よりも完全に異なるように見えます。 MySQLでジャーナリングされた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の永続性をジャーナリングなしで使用することに決めました。パブリッシャとサブスクライバの両方のフェイルオーバーでうまく機能しました。

+0

ありがとう、これを試してみてください。フェイルオーバーは間違いなく問題ですが、AMQサイトでこれについて読んでみると、JDBCのw/outジャーナリングははるかに遅いようです。あなたのトラフィックは何ですか:安定しているか間欠ですか?ピークボリュームと平均ボリュームは何ですか? –

+0

私たちのシステムはまだ生産されていませんが、大量のメッセージは期待していません。ピーク時には1000メッセージ/秒が予想され、パフォーマンステストではこのようなトラフィックでCPU負荷が40%でも登録されませんでした。私たちにとって最も重要なことは信頼性であり、メッセージが必要なときに送受信されることを保証します。情報の損失なしには許容されません。 – Paul

+0

私はそれがすべての視点の問題だと思います。私には、1000 /秒は相当なものです。しかし、持続的なボリュームではない場合、私はあなたの平均を期待するものに興味があるだろうか? –