从Tomcat应用程序启动ActiveMQ,但在实例之间使用共享数据源

时间:2015-01-29 20:37:30

标签: java spring apache apache-camel activemq

我已成功运行 ActiveMQ 5.9.1 Camel 2.11 Tomcat 7.0.50 服务层应用程序,并依赖于ActiveMQ独立开始。 我使用ActiveMQ的原因是在两个相同的负载平衡实例之间拥有共享数据存储区,以便加快处理速度。

这是我想要做的:  能够从 pom.xml 启动ActiveMQ,或者从 context.xml 启动最坏情况。因此,假设2个实例是负载平衡的,它们启动自己的ActiveMQ服务器,但它们指向单个数据存储(目录)以获取队列信息。  请告知我如何才能在生产环境中保持最佳性能。  我还在寻找任何我可以尝试的伪代码,还没有成功。

camelContext.xml的代码片段

<broker id="broker" brokerName="myBroker" useShutdownHook="false" useJmx="true" persistent="true" dataDirectory="activemq-data" 
        xmlns="http://activemq.apache.org/schema/core">
        <transportConnectors>
            <transportConnector name="tcp" uri="tcp://localhost:61616"/>
        </transportConnectors>
    </broker>

    <bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="tcp://myBroker?create=false&amp;waitForStart=5000" />
    </bean>

    <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.PooledConnectionFactory"
        init-method="start" destroy-method="stop">
        <property name="maxConnections" value="8" />
        <property name="connectionFactory" ref="jmsConnectionFactory" />
    </bean>

    <bean id="activeMQConfig"
        class="org.apache.activemq.camel.component.ActiveMQConfiguration">
        <property name="connectionFactory" ref="pooledConnectionFactory" />
        <property name="concurrentConsumers" value="20" />
    </bean>

    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="configuration" ref="activeMQConfig" />
        <property name="transacted" value="true" />
        <property name="cacheLevelName" value="CACHE_CONSUMER" />
    </bean>

请帮忙。

1 个答案:

答案 0 :(得分:0)

我终于解决了这个问题。如果其他人遇到同样的问题,我将ActivemQ版本降级到5.8.0以解决问题。