Тема ActiveMQ в очереди, при использовании сообщений маршрута Camel теряются при переключении с главного на подчиненный? - PullRequest
0 голосов
/ 03 января 2019

Настройка: По умолчанию 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 могут использоватьсябыть пропущенным - или какие-либо идеи о том, как решить или отладить эту проблему пропущенных сообщений?

1 Ответ

0 голосов
/ 04 января 2019

Вам необходимо настроить ActiveMQComponent на прием сообщений транзакционных . По умолчанию потребление сообщений составляет , а не транзакционных. Таким образом вы получаете лучшую производительность, но вы также «принимаете» потерять сообщения.

...