我怎么知道ActiveMQ是否正在使用我的activemq.xml?

时间:2017-06-28 03:04:43

标签: java tomcat java-ee jms activemq

我正在通过下面的context.xml在Tomcat中创建一个嵌入式ActiveMQ。它在代理URL brokerURL="vm://localhost?brokerConfig=xbean:activemq.xml"中指定config xml位置。

我已将activemq.xml放在WAR文件的基础上(所以 next 到WAR中的WEB-INF)。会在那里找到吗?

MyWAR.war
WEB-INF /
beans.xml中
activemq.xml

我的context.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<Context>

    <!-- JMS Factory and Queue -->
    <Resource auth="Container"
            name="jms/ConnectionFactory"
            type="org.apache.activemq.ActiveMQConnectionFactory"
            description="JMS Connection Factory"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            brokerURL="vm://localhost?brokerConfig=xbean:activemq.xml"
            brokerName="MyBroker"
            useEmbeddedBroker="true"
            trustAllPackages="true"
            persistent="true"
    />

    <Resource auth="Container"
            name="jms/MyQueue"
            type="org.apache.activemq.command.ActiveMQQueue"
            description="Downtime Event JMS queue"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            physicalName="MyQueue"
            persistent="true"
    />

    <Resource auth="Container"
            name="jms/MyQueueRetry"
            type="org.apache.activemq.command.ActiveMQQueue"
            description="Downtime Event JMS queue"
            factory="org.apache.activemq.jndi.JNDIReferenceFactory"
            physicalName="MyQueueRetry"
            persistent="true"
    />

</Context>

编辑:我更新的activemq.xml

<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:amq="http://activemq.apache.org/schema/core"
        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">

    <bean id="ioExceptionHandler" class="org.apache.activemq.util.DefaultIOExceptionHandler">
        <property name="ignoreAllErrors"><value>true</value></property>
    </bean>

    <!-- MySql DataSource Sample Setup -->
    <bean id="mysql-ds" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/activemq"/>
        <property name="username" value="testuser"/>
        <property name="password" value="password"/>
        <property name="poolPreparedStatements" value="true"/>
    </bean>

    <broker
            xmlns="http://activemq.apache.org/schema/core"
            persistent="true"
            ioExceptionHandler="#ioExceptionHandler"
            useShutdownHook="true"
            useJmx="false"
            brokerName="EventBroker"
    >
        <persistenceAdapter>
            <jdbcPersistenceAdapter dataSource="#mysql-ds" />
        </persistenceAdapter>
    </broker>
</beans>

我也尝试了以下两种方法:

brokerURL="vm://localhost?brokerConfig=xbean:classpath:activemq.xml"

(并将其放入WEB-INF) brokerURL="vm://localhost?brokerConfig=xbean:classpath:WEB-INF/activemq.xml"

它永远不会使用MySQL。

2 个答案:

答案 0 :(得分:1)

有几种方式..

将org.apache.activemq的日志记录变为DEBUG或TRACE

在开放端口61618上添加其他条目。确认它正在使用netstat进行侦听。

此外,您可以连接到正在运行的JVM进程的JMX,并查看存在的org.apache.activemq JMX bean。

一对夫妇参考:

答案 1 :(得分:0)

(部分来自@Matt_Pavlovich的帮助)

你必须使用xbeans下的brokerURL="vm://localhost?brokerConfig=xbean:classpath:META-INF/activemq.xml" 密钥,它必须位于WAR类路径中可以找到的目录中(例如META-INF):

{{1}}