无法在NFSv3共享上启动持久存储的AMQ代理

时间:2013-12-23 05:37:33

标签: activemq

我一直在努力在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&amp;wireFormat.maxFrameSize=104857600"/>
            <transportConnector name="stomp" uri="stomp://0.0.0.0:61613?maximumConnections=1000&amp;wireFormat.maxFrameSize=104857600"/>
        </transportConnectors>

    </broker>
</beans>

这是因为我使用的是NFSv3,而不是AMQ推荐的NFSv4吗?

我认为NFSv3的问题在于,如果所有代理进程突然死亡,它就无法清除锁。但是,启动经纪人不应该有任何问题。如果我的理解是正确的,为什么我会观察到上述错误?

1 个答案:

答案 0 :(得分:0)

你说的完全正确 - NFS3没有正确清理它的锁。使用KahaDB时,代理会在$ACTIVEMQ_DATA/lock中创建一个文件。如果该文件存在,则可能存在某些东西(或者至少NFS3认为它存在)并且代理将被阻止。检查文件是否存在,如果存在,请使用lsof命令确定其持有者的进程ID。