我一直在努力在NFSv3共享上使用持久存储来启动AMQ代理节点。 我一直得到以下错误抱怨不可用的锁。 我确保在启动AMQ主代理之前,所有java进程都被终止并且共享文件夹上的锁文件被删除。
当我启动AMQ时,它似乎在共享文件夹上创建了一个锁定文件,之后就会抱怨锁定不可用。
Loading message broker from: xbean:activemq.xml
INFO | Refreshing org.apache.activemq.xbean.XBeanBrokerFactory$1@73cf56e9: startup date [Mon Dec 23 05:28:23 UTC 2013]; root of context hierarchy
INFO | PListStore:[/home/pnarayan/apache-activemq-5.9.0/activemq-data/notificationsBroker/tmp_storage] started
INFO | Using Persistence Adapter: KahaDBPersistenceAdapter[/home/y/share/nfs/amqnfs]
INFO | JMX consoles can connect to service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi
INFO | Database /home/y/share/nfs/amqnfs/lock is locked... waiting 10 seconds for the database to be unlocked. Reason: java.io.IOException: No locks available
下面是我正在使用的activemq xml配置文件:
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://activemq.apache.org/schema/core http://activemq.apache.org/schema/core/activemq-core.xsd">
<broker
xmlns="http://activemq.apache.org/schema/core"
xmlns:spring="http://www.springframework.org/schema/beans"
brokerName="notificationsBroker"
useJmx="true"
start="true"
persistent="true"
useShutdownHook="false"
deleteAllMessagesOnStartup="false">
<persistenceAdapter>
<kahaDB directory="/home/y/share/nfs/amqnfs" />
</persistenceAdapter>
<transportConnectors>
<transportConnector name="openwire" uri="tcp://0.0.0.0:61616?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
<transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&wireFormat.maxFrameSize=104857600"/>
</transportConnectors>
</broker>
</beans>
这是因为我使用的是NFSv3,而不是AMQ推荐的NFSv4吗?
我认为NFSv3的问题在于,如果所有代理进程突然死亡,它就无法清除锁。但是,启动经纪人不应该有任何问题。如果我的理解是正确的,为什么我会观察到上述错误?
答案 0 :(得分:0)
你说的完全正确 - NFS3没有正确清理它的锁。使用KahaDB时,代理会在$ACTIVEMQ_DATA/lock
中创建一个文件。如果该文件存在,则可能存在某些东西(或者至少NFS3认为它存在)并且代理将被阻止。检查文件是否存在,如果存在,请使用lsof
命令确定其持有者的进程ID。