Как обнаружить потерю соединения 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" сообщения, он может предположить, что он был отключен.