Возможно, это не обычный способ, но мы пытаемся развернуть приложение (EAR) внутри кластера WAS 6.1 с двумя узлами.
У каждого узла будет свой брокер, и мы хотели бы, чтобы они были подключены как сеть через обнаружение.
Клиенты будут подключаться к одному из них также через обнаружение, и у нас есть только одна очередь и одна тема, и, действительно, это только тема, которая должна быть в сети брокера, поскольку производитель находится внутри узлов, а потребитель будет быть одним из клиентов, который может быть подключен к любому узлу.
Это привело нас к нескольким проблемам, поскольку мы должны развернуть только один EAR с одним файлом конфигурации activemq.xml.
<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, поскольку я прочитал здесь , что в нем могут быть переменные, но это не работает вне развертывания maven, но не уверен, что это наш только ошибка или их больше.
Я добавлю дополнительную информацию, если нужно, просто скажите мне.