也许这不是通常的做事方式,但我们正在尝试在具有2个节点的WAS 6.1群集中部署应用程序(EAR)。
每个节点都有自己的代理,我们希望通过发现将它们作为网络连接。
客户端也将通过发现连接其中一个,我们只有一个队列和一个主题,实际上只是需要在代理网络中的主题,因为生产者在节点内,消费者将是可以连接到任一节点的客户端之一。
这导致我们遇到了几个问题,因为我们只需部署一个带有一个activemq.xml配置文件的EAR。
<beans:beans xmlns:beans="http://www.springframework.org/schema/beans"
xmlns="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-2.5.xsd
http://activemq.apache.org/schema/core
http://activemq.apache.org/schema/core/activemq-core-5.4.1.xsd
http://camel.apache.org/schema/spring
http://camel.apache.org/schema/spring/camel-spring-2.5.0.xsd">
<!-- Allows us to use system properties as variables in this configuration file
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>file:///./conf/credentials.properties</value>
</property>
</bean>
-->
<!-- <broker xmlns="http://activemq.apache.org/schema/core" brokerName="{hostname}" dataDirectory="./activemq-data"> -->
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="${COMPUTERNAME}" dataDirectory="./activemq-data">
<!-- Destination specific policies using destination names or wildcards -->
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" memoryLimit="5mb"/>
<policyEntry topic=">" memoryLimit="5mb">
<!-- you can add other policies too such as these
<dispatchPolicy>
<strictOrderDispatchPolicy/>
</dispatchPolicy>
<subscriptionRecoveryPolicy>
<lastImageSubscriptionRecoveryPolicy/>
</subscriptionRecoveryPolicy>
-->
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
<!-- Use the following to configure how ActiveMQ is exposed in JMX -->
<!--
<managementContext>
<managementContext createConnector="true"/>
</managementContext>
-->
<networkConnectors>
<networkConnector uri="multicast://default?group=${groupId}"/>
</networkConnectors>
<persistenceAdapter>
<amqPersistenceAdapter syncOnWrite="false" directory="./activemq-data" maxFileLength="20 mb"/>
</persistenceAdapter>
${sslContext}
<!-- The maximum about of space the broker will use before slowing down producers -->
<systemUsage>
<systemUsage>
<memoryUsage>
<memoryUsage limit="20 mb"/>
</memoryUsage>
<storeUsage>
<storeUsage limit="1 gb" name="foo"/>
</storeUsage>
<tempUsage>
<tempUsage limit="100 mb"/>
</tempUsage>
</systemUsage>
</systemUsage>
<!-- The transport connectors ActiveMQ will listen to -->
<transportConnectors>
<transportConnector name="openwire" uri="${brokerURL}" discoveryUri="multicast://default?group=${groupId}" updateClusterClients="true" rebalanceClusterClients="true" updateClusterClientsOnRemove="true" />
</transportConnectors>
</broker>
</beans:beans>
这是使用的maven过滤器:
brokerURL=tcp://0.0.0.0:61616
sslContext=
groupId=0
这是我们使用的最后一个版本,如果客户端使用直接ips进行故障转移,它可以连接到它们两个,使用发现只有一个节点(Windows XP)找到另一个(Windows Server 2008)没有回复IGMP数据包(禁用所有防火墙)并且它们不相互连接。
其中一个已知问题是brokerName,因为我已阅读here它可以包含变量,但这似乎不能在maven部署之外工作,但不确定它是否是我们唯一的错误或者还有更多。
如果需要,我会添加额外的信息,告诉我。