∵ Takayoshi Saito ∴ 2013-07-26 ∞ 2'
先日、ActiveMQでフェイルオーバー時にMySQLと連携させる記事を書きましたが、MySQLと連携させるとActiveMQの通信ポート61616がなぜか解放されない問題が起きました。ログを見るとこんな感じ。
2013-07-26 16:54:17,173 | INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@786c730: startup date ; root of context hierarchy | org.apache.activemq.xbean.XBeanBrokerFactory$1 | WrapperSimpleAppMain
2013-07-26 16:54:18,638 | INFO | PListStore: started | org.apache.activemq.store.kahadb.plist.PListStoreImpl | WrapperSimpleAppMain
2013-07-26 16:54:18,682 | INFO | Using Persistence Adapter: JDBCPersistenceAdapter(org.apache.commons.dbcp.BasicDataSource@6760bf50) | org.apache.activemq.broker.BrokerService | WrapperSimpleAppMain
2013-07-26 16:54:18,972 | INFO | Database adapter driver override not found for : . Will use default implementation. | org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | WrapperSimpleAppMain
2013-07-26 16:54:20,070 | INFO | Database lock driver override not found for : . Will use default implementation. | org.apache.activemq.store.jdbc.JDBCPersistenceAdapter | WrapperSimpleAppMain
2013-07-26 16:54:20,072 | INFO | Attempting to acquire the exclusive lock to become the Master broker | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | WrapperSimpleAppMain
2013-07-26 16:54:20,093 | INFO | Failed to acquire lock. Sleeping for 10000 milli(s) before trying again... | org.apache.activemq.store.jdbc.DefaultDatabaseLocker | WrapperSimpleAppMain
Database lockに失敗していて、その後スリープされてしまったようです。これでは61616ポートで通信が出来ません。
上記のようにactivemq.xmlを変更してみたのですが、解決しませんでした。
どうやら永続化の設定に問題があったようです。activemq.xmlの記述を以下に修正したらMySQLと連携したまま61616ポートで動作するようになりました。
lsofでポートを確認しても大丈夫。
lsof -i :61616
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 8790 tomcat 41u IPv4 52645 0t0 TCP localhost:46563->localhost:61616 (ESTABLISHED)
java 14588 root 154u IPv4 52386 0t0 TCP *:61616 (LISTEN)
java 14588 root 157u IPv4 52646 0t0 TCP localhost:61616->localhost:46563 (ESTABLISHED)
Master / Slave構成でなければuseDatabaseLock="false"にする必要があるみたいです。