Свойство ActiveMQ trackMessages не работает

Я использую ActiveMQ в качестве своей JMS-системы, которая получает сообщения журнала от JMSQueueAppender выхода из системы. Клиент - это веб-приложение. И клиент, и брокер находятся на разных машинах.

Мое требование состоит в том, что если клиент не может подключиться к брокеру, он должен хранить сообщения до тех пор, пока он повторно не подключится к брокеру. Я попытался использовать отработку отказа, как указано в Справочнике по переносу отказоустойчивого транспорта Apache. Мой URL-адрес подключения выглядит следующим образом:

failover:(tcp://10.17.67.116:61616?wireFormat.maxInactivityDuration=0)?trackMessages=true&maxReconnectDelay=10000&timeout=3000

Предполагается, что свойство trackMessages = true кэширует сообщения в полете на клиенте, которые позже будут доставлены брокеру всякий раз, когда они появятся. Моя проблема в том, что после появления брокера я не вижу, чтобы он получал сообщения, которые должны были быть доставлены.

Где я ошибаюсь в настройке ActiveMQ? Это кажется довольно простой и понятной реализацией, которая не работает.


person Smit Sanghavi    schedule 23.03.2015    source источник


Ответы (1)


Я думаю, что trackMessages=true работает только в случае сбоя, т.е. клиент сначала подключается к серверу, но отключается на полпути, во время send () или перед фиксацией транзакции. В этом случае протокол failover должен иметь возможность кэшировать несколько сообщений (в зависимости от maxCacheSize) и отправлять их на сервер, как только он вернется.

Попробуйте отправить, скажем, пакет из 100 сообщений за одну транзакцию с задержкой, скажем, 1 секунду в каждом отправленном сообщении. Таким образом, производителю сообщения потребуется 100 секунд для завершения транзакции. Затем одновременно попробуйте перезапустить сервер за эти 100 секунд и посмотрите, получит ли он эти 100 сообщений.

Обратитесь - http://activemq.apache.org/failover-transport-reference.html

person hemant1900    schedule 25.03.2015