Как обнаружить потерю соединения JMS Topic

У нас есть свинг-клиенты с графическим интерфейсом, которые подключаются к процессу сервера.

Клиенты "звонят" на сервер, используя jms:queue конечные точки 'from', определенные в маршрутах Camel, и использующие ActiveMQ в качестве базового JMS-брокера.

Тем не менее, клиент также предлагает верблюд jms:topic конечная точка для сервера для рассылки сообщений обратно клиенту.

К сожалению, похоже, что тематическое соединение каким-то образом теряется, и хотя клиент все еще может "вызывать" службы на сервере, сервер не может отправлять какие-либо сообщения конечной точке клиента.

Определение клиентской пружины конечной точки Camel выглядит следующим образом:

    <camel:route>
        <camel:from uri="jms:topic:inUseQueue"/>
        <camel:to uri="bean:inUseInterfaceImpl"/>
    </camel:route>

И серверный производитель определяется следующим образом:

<bean id="inUseManagerImpl" class="org.apache.camel.spring.remoting.CamelProxyFactoryBean">
  <property name="serviceUrl" value="jms:topic:inUseQueue"/>
  <property name="serviceInterface" value="uniworks.core.inuse.InUseInterface"/>
</bean>

Кто-нибудь знает, каким образом мы можем как-то обнаружить потерю этой темы связи на стороне клиента?

2 ответа

Простой обходной путь должен быть переопределить isSingleton() метод CamelProxyFactoryBean, Верните false и позвольте Spring создавать компонент-производитель при каждом вызове, а не кэшировать его. Или вы также можете определить объем CamelProxyFactoryBean быть прототипом.

Также вы можете попробовать с верблюжьим компонентом ActiveMQ, который поддерживает пул соединений.

Я понимаю, что это 8-месячный вопрос, но, черт возьми, эй.

Было бы целесообразно, чтобы сервер передавал "isalive" сообщение раз в минуту, таким образом, если клиент не получает ни одного "isalive" сообщения, он может предположить, что он был отключен.

Другие вопросы по тегам