Требуется закрыть соединение ActiveMq - PullRequest
0 голосов
/ 22 марта 2012

Мне нужна помощь с Embedded ActiveMq и Spring Framework.

Проблема: - Я использую Embedded ActiveMQ с поддержкой JMS Spring Framework.

В рамках разработки у меня есть компонент, который публикует сообщения в виртуальной теме. И у меня есть другой компонент, который подписывается на сообщения из темы.

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

У нас есть системное свойство, установленное для различения главного и подчиненного экземпляров. Я попытался добавить условие, переопределив createConnection метод класса ActiveMqConnectionFactory.

if(master) {
ActiveMqConnectionFactory.createConnection} 
else 
return null.

в этом случае DefaultMessageListener среды Spring, которую мы настроили для прослушивания событий, всегда пытающихся обновить соединение, так как я возвращаю нулевое значение для ведомого, не удается создать соединение. поток собирается в бесконечный цикл с интервалом 5000 мс ..

Можно ли как-то сказать MessageListener, чтобы он не обновлял соединение ..

Пожалуйста, помогите мне решить эту проблему ..

1 Ответ

0 голосов
/ 23 марта 2012

если кластер ведущий / ведомый ... тогда только один должен быть активным в данный момент времени ... звучит так, как будто у вас есть два мастера с точки зрения клиента AMQ ...

независимо отвсегда используйте безопасность ActiveMQ для управления доступом к определенной теме / очереди на основе учетных данных подключения (см. http://activemq.apache.org/security.html)

...