Настройка ActiveMQ, встроенного в кластер WAS - PullRequest
1 голос
/ 08 февраля 2011

Возможно, это не обычный способ, но мы пытаемся развернуть приложение (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, но не уверен, что это наш только ошибка или их больше.

Я добавлю дополнительную информацию, если нужно, просто скажите мне.

...