Настройка: По умолчанию ActiveMQ.XML.Один экземпляр ActiveMQ на сервер на 3 серверах в локальном центре обработки данных, один экземпляр ActiveMQ на удаленном сервере центра обработки данных.Все экземпляры 3 + 1 работают, но только один экземпляр ActiveMQ является ведущим в любой момент времени для каждого центра обработки данных.Сообщения из всех экземпляров во всех дата-центрах сохраняются в сети KahaDB, и мы настроили две попытки для каждого сообщения.
Цель: Чтобы синхронизировать очереди между дата-центрами.
Проблема: Чтобы проверить, когда удаленный сервер не работает, этовсе сообщения будут сохраняться / сохраняться до тех пор, пока удаленный сервер не вернется в оперативный режим.Я отправлю три сообщения в тему ActiveMQ.
Маршрут верблюда настроен для чтения из темы и отправки в 2 локальные очереди.
Второй верблюжий маршрут настроен для чтения из одной из локальных очередей и отправки сообщения на удаленный ActiveMQ.
Когда удаленный сервер выключен (дата-центр 2не работает), и мы переключаемся с Master ActiveMQ (останавливая службу) на подчиненное устройство, 1 из 3 сообщений теряется для эфира. Кажется, это первое сообщение, отправленное на удаленный сервер.,Как будто он получает соединение отказано или что-то, и он исчезает навсегда, даже не входя в DLQ?
Конфигурация верблюда:
<bean id="local" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="brokerURL" value="tcp://localhost:12345"/>
<property name="preserveMessageQos" value="true" />
</bean>
<bean id="remote" class="org.apache.activemq.camel.component.ActiveMQComponent">
<property name="brokerURL" value="failover:(tcp://remotehost:54321)"/>
<property name="preserveMessageQos" value="true" />
</bean>
<camelContext id="topicToQueueCamelContext" xmlns="http://camel.apache.org/schema/spring">
<route id="topicToQueue">
<from uri="local:topic:SomeTopic"/>
<to uri="local:queue:SomeQueue"/>
<to uri="local:queue:SomeQueue.Remote"/>
</route>
</camelContext>
<camelContext id="queueToRemoteQueueCamelContext" xmlns="http://camel.apache.org/schema/spring">
<route id="queueToRemoteQueue">
<from uri="local:queue:SomeQueue.Remote"/>
<to uri="remote:queue:SomeQueue"/>
</route>
</camelContext>
Попытка: Задание удаленных верблюжьих маршрутов как транзакционных и установка trackMessages = true на отказоустойчивый транспорт brokerURL.
У кого-нибудь есть идеи относительно того, какие параметры строки запроса ActiveMQ BrokerURL, ActiveMQ XML или Camel URI могут использоватьсябыть пропущенным - или какие-либо идеи о том, как решить или отладить эту проблему пропущенных сообщений?